我正在开发一个J2 ME客户机,它必须使用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);
}
}
共享资源上传似乎只能上传多部分文件,但没有应用程序/octect流。
但是对于客户端,没有Multipart类,在本例中,也不可能使用任何HttpClient库。
另一种选择是使用HTTP Chunk上载,但是我还没有找到一个明确的例子来说明如何实现这一点,特别是在servlet端。
我的选择是:- 实现用于http块上载的servlet-实现用于http多部分创建的原始客户端
我不知道如何实现以上选项。有什么建议吗?
6条答案
按热度按时间w8biq8rn1#
通过HTTP发送文件应该使用
multipart/form-data
编码,servlet部分已经使用Apache Commons FileUpload来解析multipart/form-data
请求,因此没有问题。但是,您的客户端部分显然不太好,因为您似乎将文件内容原始写入请求主体。您需要确保您的客户端发送正确的
multipart/form-data
请求。具体如何操作取决于您用于发送HTTP请求的API。如果是普通的java.net.URLConnection
,那么你可以在答案的底部找到一个具体的例子,如果你用Apache HttpComponents Client来做这个,那么这里有一个具体的例子,取自their documentation:与具体问题无关,服务器端代码中存在一个错误:
这可能会覆盖以前上传的同名文件,我建议使用
File#createTempFile()
。bkhjykvo2#
以下代码可用于使用HTTP客户端4.x上传文件(以上答案使用MultipartEntity,该实体现已弃用)
您需要以下Apache库的最新版本:HTTP客户端、HTTP核心、HTTP MIME。
可以用
HttpClients.createDefault()
来替换getClient()
。p4tfgftt3#
请查找在Java中使用HttpClient的文件上载功能的示例。
tyu7yeag4#
古代的问题和最好的答案依赖于不正确的陈述。
通过HTTP发送文件应该使用multipart/form-data编码。
以OCTET-STREAM格式发送文件效率更高。
JDK 11+客户端代码:
hts6caw35#
感谢所有的代码我已经狙击...这里是一些回来。
yqhsw0fo6#
无需输入血淋淋的细节,您的代码看起来很好。
现在你需要服务器端,我推荐你使用Jakarta FileUpload,所以你不需要实现任何东西,只需要部署和配置。