使用单个连接将多个文件发送到servlet

时间:2010-12-21 00:16:46

标签: java http servlets file-upload

我正在编写一个Java桌面客户端,它将使用post请求通过线路将多个文件发送到servlet。在servlet中,我从请求中获取输入流以接收文件。当从流中读取文件时,servlet会将文件逐个写入磁盘。

实施有几个要求:

  • 服务器只能使用一个HTTP请求(因此只有一个流)
  • 无论文件大小如何,servlet都必须使用合理的固定内存量。

我曾考虑在流中插入标记,因此我知道一个文件何时结束并且下一个文件开始。然后我编写一些代码来解析servlet中的流,并开始编写适当的下一个文件。

这就是......肯定有一个库可以做到这一点。我看过apache的公地,一无所获。 Commons File Upload很有意思,但由于上传来自Java应用程序,而不是浏览器,它只能解决接收端,而不是发送。

对库的任何想法都可以轻松地允许跨单个流进行多个文件传输,即使对于非常大的文件也具有固定的内存预期?

感谢。

1 个答案:

答案 0 :(得分:7)

在POST请求正文中使用HTTP multipart/form-data编码。它在RFC-2388中描述,是通过HTTP上传(多个)文件的标准方式。

您可以使用此java.net.URLConnection中所述的mini-tutorial进行此操作,但它会生成许多样板代码。更方便的方法是使用Apache Commons HttpClient

在servlet方面,您可以使用Apache Commons Fileupload以通常的HTTP方式处理上传的文件(或者当您已经使用Servlet 3.0时,HttpServletRequest#getParts(),另请参阅{{3}例如)。