我正在编写一个Java桌面客户端,它将使用post请求通过线路将多个文件发送到servlet。在servlet中,我从请求中获取输入流以接收文件。当从流中读取文件时,servlet会将文件逐个写入磁盘。
实施有几个要求:
我曾考虑在流中插入标记,因此我知道一个文件何时结束并且下一个文件开始。然后我编写一些代码来解析servlet中的流,并开始编写适当的下一个文件。
这就是......肯定有一个库可以做到这一点。我看过apache的公地,一无所获。 Commons File Upload很有意思,但由于上传来自Java应用程序,而不是浏览器,它只能解决接收端,而不是发送。
对库的任何想法都可以轻松地允许跨单个流进行多个文件传输,即使对于非常大的文件也具有固定的内存预期?
感谢。
答案 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}例如)。