加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 16:40:18 所属栏目:Java 来源:网络整理
导读:我正在开发一个J2ME客户端,必须使用HTTP将文件上传到Servlet. 使用Apache Commons FileUpload覆盖了servlet部分 protected void doPost(HttpServletRequest request,HttpServletResponse response) { ServletFileUpload upload = new ServletFileUpload(); u
我正在开发一个J2ME客户端,必须使用HTTP将文件上传到Servlet.

使用Apache Commons FileUpload覆盖了servlet部分

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似乎只能上传multipart文件,但是没有应用程序/ octect-stream.

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

其他选项可能是使用HTTP Chunk上传,但是我没有找到一个明确的例子来说明如何实现这一点,特别是在servlet方面.

我的选择是:
– 实现一个用于http chunk上传的servlet
– 实现用于http多部分创建的原始客户端

我不知道如何执行上述任何选项.
任何建议?

解决方法

通过HTTP发送文件应该是使用multipart / form-data编码进行的.您的servlet部分很好,因为它已经使用 Apache Commons FileUpload来解析多部分/表单数据请求.

然而,您的客户端部分显然不正确,因为您似乎将文件内容原始的写入请求主体.您需要确保您的客户端发送正确的多部分/表单数据请求.如何做到这一点取决于您用来发送HTTP请求的API.如果它是纯朴的java.net.URLConnection,那么你可以在this answer底部找到一个具体的例子.如果你使用Apache HttpComponents Client这个例子,

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);

MultipartEntity entity = new MultipartEntity();
entity.addPart("file",new FileBody(file));
post.setEntity(entity);

HttpResponse 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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读