gpt4 book ai didi

java - 如何通过 Java Http Post 发送和接受文件?

转载 作者:行者123 更新时间:2023-12-01 12:38:48 25 4
gpt4 key购买 nike

我只想通过网络发送一个文本文件和一个 JPEG 文件。幸运的是,我可以访问服务器代码和客户端代码。这是我的(谷歌应用引擎)代码。

private void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
GcsService gcsService = GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());
GcsFilename filename = new GcsFilename("my-bucket", "my-file");
Builder fileOptionsBuilder = new GcsFileOptions.Builder();
fileOptionsBuilder.mimeType("text/html");
GcsFileOptions fileOptions = fileOptionsBuilder.build();
GcsOutputChannel outputChannel = gcsService.createOrReplace(filename, fileOptions);

byte[] buffer = new byte[1024];
InputStream reader = req.getInputStream();
BufferedOutputStream outStream = new BufferedOutputStream(Channels.newOutputStream(outputChannel));
while(true) {
int bytesRead = reader.read(buffer);
if (bytesRead == -1) {
break; // have a break up with the loop.
} else if (bytesRead < 1024) {
byte[] temp = Arrays.copyOf(buffer, bytesRead);
outStream.write(temp);
} else {
outStream.write(buffer);
}
}

outStream.close();
outputChannel.close();
}

如您所见,我使用原始输入流来获取通过网络发送的所有数据。

在客户端,我发送一个文本文件,如下所示:(在 Android 中)

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpost = new HttpPost("http://my-hosted-url/postit");
MultipartEntity entity = new entity.addPart("myImageFile", new FileBody(someLogFile));
httpost.setEntity(entity);
HttpResponse response;
response = httpClient.execute(httpost);

这工作得很好......有点。问题是,当我尝试查看发送的文件/数据时,它的顶部有一个 header ,如下所示:

--NNqarc4FsG0G8hUzd82A6TCjgzKH 内容处置:表单数据; name="myString"内容类型:text/plain;字符集 = US-ASCII 内容传输编码:8 位 STRING_VALUE ---NNqarc4FsG0G8hUzd82A6TCjgzKH 内容处置:表单数据;名称=“myImageFile”; filename="something.txt"内容类型:application/octet-stream 内容传输编码:二进制

[Thu Aug 14 17:14:26 PDT 2014] 那么真正的日志从这里开始...

如何摆脱以某种方式粘在正文上的 header ?

最佳答案

你这里有一个 multipart request.这是一个单一请求,其中正文由由分隔符字符串分隔的各个部分组成。

就您而言,它更容易被视为:

--NNqarc4FsG0G8hUzd82A6TCjgzKH 
Content-Disposition: form-data; name="myString"
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 8bit

STRING_VALUE
---NNqarc4FsG0G8hUzd82A6TCjgzKH
Content-Disposition: form-data; name="myImageFile"; filename="something.txt"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

[binary here]

它有两个部分,每个部分都有相应的标题和正文。我猜你对尸体感兴趣。您需要提取它们。

您可以阅读 HTTP 规范和/或有关多部分请求的规范并编写自己的解析器,也可以使用一些内置的(我不知道 GAE 是否已准备好 Servlet 3.0)或第 3 方方法。请参阅这些

关于java - 如何通过 Java Http Post 发送和接受文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25320870/

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