gpt4 book ai didi

java - java中的简单流读/写问题

转载 作者:搜寻专家 更新时间:2023-11-01 01:24:12 24 4
gpt4 key购买 nike

我正在尝试通过 URLConnection 上传文件,但我需要将其作为二进制文件进行读/写,而不更改任何编码。

所以我尝试从 FileInputStream 读取 byte[] 数组,但现在我遇到了问题。我用于输出到服务器的 PrintWriter 对象不允许我执行 writer.write(content) (其中 content 是类型 字节[])。我怎样才能解决这个问题?或者是否有另一种方法可以将二进制数据从 FileInputStream 快速复制到 PrintWriter

谢谢

最佳答案

我打赌这是对这个问题的跟进:Upload files from Java client to a HTTP server

如果您还想使用 multipart/form-data 上传二进制文件,则需要将它们写入 OutputStream。这是我在您之前的示例中发布的代码更改示例,仅更改了 try block 以保留二进制输出流的单独句柄,以便您可以编写任何 InputStream 没有任何编码的痛苦:

OutputStream output = null;
PrintWriter writer = null;
try {
output = connection.getOutputStream();
writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"), true); // true = Autoflush, important!

writer.println("--" + boundary);
writer.println("Content-Disposition: form-data; name=\"paramToSend\"");
writer.println("Content-Type: text/plain; charset=UTF-8");
writer.println();
writer.println(paramToSend);

writer.println("--" + boundary);
writer.println("Content-Disposition: form-data; name=\"fileToUpload\"; filename=\"" + fileToUpload.getName() + "\"");
writer.println("Content-Type: " + URLConnection.guessContentTypeFromName(fileToUpload.getName());
writer.println("Content-Transfer-Encoding: binary");
writer.println();
InputStream input = null;
try {
input = new FileInputStream(fileToUpload);
byte[] buffer = new byte[1024];
for (int length = 0; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
output.flush();
} finally {
if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}
}
writer.println();

writer.println("--" + boundary + "--");
} finally {
if (writer != null) writer.close();
}

关于java - java中的简单流读/写问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2477449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com