gpt4 book ai didi

Java Http 客户端通过 POST 上传文件

转载 作者:太空狗 更新时间:2023-10-29 23:01:05 25 4
gpt4 key购买 nike

我正在开发一个 J2ME 客户端,它必须使用 HTTP 将文件上传到 Servlet。

servlet 部分使用 Apache Commons FileUpload 覆盖

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
{

ServletFileUpload upload = new ServletFileUpload();
upload.setSizeMax(1000000);

File fileItems = upload.parseRequest(request);

// Process the uploaded items
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
File file = new File("\files\\"+item.getName());
item.write(file);
}
}

Commons Upload 似乎只能上传多部分文件,但不能上传 application/octect-stream。

但是对于客户端,没有 Multipart 类,在这种情况下,也不能使用任何 HttpClient 库。

其他选项可能是使用 HTTP block 上传,但我还没有找到一个明确的例子来说明如何实现它,特别是在 servlet 端。

我的选择是:- 为 http block 上传实现一个 servlet- 为 http 多部分创建实现原始客户端

我不知道如何实现以上选项。有什么建议吗?

最佳答案

通过 HTTP 发送文件应该使用 multipart/form-data 编码。您的 servlet 部分很好,因为它已经使用了 Apache Commons FileUpload解析 multipart/form-data 请求。

然而,您的客户端部分显然不正常,因为您似乎是将文件内容原始写入请求正文。您需要确保您的客户端发送正确的 multipart/form-data 请求。具体如何操作取决于您用来发送 HTTP 请求的 API。如果它是普通的 java.net.URLConnection,那么您可以在 this answer 底部附近的某处找到一个具体示例。 .如果您使用 Apache HttpComponents Client为此,这里有一个具体的例子,取自 their documentation :

String url = "https://example.com";
File file = new File("/example.ext");

try (CloseableHttpClient client = HttpClients.createDefault()) {
HttpPost post = new HttpPost(url);
HttpEntity entity = MultipartEntityBuilder.create().addPart("file", new FileBody(file)).build();
post.setEntity(entity);

try (CloseableHttpResponse response = client.execute(post)) {
// ...
}
}

与具体问题无关,您的服务器端代码中存在错误:

File file = new File("\files\\"+item.getName());
item.write(file);

这可能会覆盖任何以前上传的同名文件。我建议使用 File#createTempFile()为此。

String name = FilenameUtils.getBaseName(item.getName());
String ext = FilenameUtils.getExtension(item.getName());
File file = File.createTempFile(name + "_", "." + ext, new File("/files"));
item.write(file);

关于Java Http 客户端通过 POST 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6917105/

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