- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在编写一个 Java 桌面客户端,它将使用 post 请求通过网络将多个文件发送到 servlet。在 servlet 中,我从接收文件的请求中获取输入流。 servlet 会在从流中读取文件时将文件一个一个地写入磁盘。
实现有几个要求:
我考虑过在流中插入标记,这样我就知道一个文件何时结束以及下一个文件何时开始。然后我会编写一些代码来解析 servlet 中的流,并开始编写适当的下一个文件。
事情是这样的……肯定有一个图书馆可以做到这一点。我查看了 apache commons,但一无所获。 Commons File Upload 很有趣,但由于上传来自 Java 应用程序,而不是浏览器,因此它只能解决接收端问题,而不是发送问题。
对于一个即使对于非常大的文件,也可以轻松地允许跨单个流进行多个文件传输并具有固定内存期望的库,有什么想法吗?
谢谢。
最佳答案
只需在 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()
,另请参阅 this answer 以获取示例)。
关于java - 使用单个连接将多个文件发送到 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4495229/
我是一名优秀的程序员,十分优秀!