无法将图像文件从 Android 应用程序发布到托管在 Tomcat 上的 Java servlet

Posted

技术标签:

【中文标题】无法将图像文件从 Android 应用程序发布到托管在 Tomcat 上的 Java servlet【英文标题】:Trouble posting image file from Android app to Java servlet hosted on Tomcat 【发布时间】:2011-10-11 01:58:09 【问题描述】:

我正在开发的 android 应用程序的一个功能是拍照并通过 HTTP Post 将其上传到 Java servlet。我找到了一些关于一般过程应该如何工作的例子,并尝试了所有这些例子。目前,代码如下所示:

客户:

String fileName = pathToFile;
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost method = new HttpPost(path);
MultipartEntity entity = new MultipartEntity();
FileBody fileBody = new FileBody(new File(fileName));
entity.addPart("file", fileBody);
method.setEntity(entity);

HttpResponse response = httpclient.execute(method);

服务器:

List<FileItem> fileItems =
new ServletFileUpload( new DiskFileItemFactory( 1024 * 1024, new File("C:\\tmp" ))).
parseRequest(request);

for ( FileItem item : fileItems ) 
String fieldName = item.getFieldName();

if ( item.isFormField())  
    item.getString();

else 
    item.getInputStream();
 // File uploaded

现在,我并不担心如何处理输入流,因为当我们调用 parseRequest(request) 并出现以下错误时,这段代码会失败: org.apache.tomcat.util.http.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly

我是 Apache HttpUpload 库的新用户。我在这里错过了什么?

提前致谢。

【问题讨论】:

你知道哪一方有问题吗?您可以通过 servlet 从常规 Web 表单上传图像吗? 好问题。我只是用一个简单的 html 表单对此进行了测试,它运行良好......我所做的只是添加一些代码来将请求 intputstream 写入文件。问题肯定出在Android端,还是会导致服务器抛出“Stream ends unexpectedly”的错误。 我发现了我遇到的问题。我最终使用的解决方案几乎与我在这里找到的解决方案一模一样:vikaskanani.wordpress.com/2011/01/11/…。真正的问题是我没有正确地将图像的字节数组包含在请求的 fileBody 部分中。一旦我把 byte[ ] 放在那里,事情就顺利多了。感谢调试等方面的建议 Raggedtoad,您能否将您的评论放在答案中并检查一下。对于访问您的问题的人来说,知道它已得到回答会更好(有时我们会错过 cmets)。谢谢 【参考方案1】:

尝试使用构造函数:

    MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

默认使用的是 STRICT 模式,这可能是问题所在。

【讨论】:

已经试过了。对我没有任何影响。我仍然得到这个org.apache.tomcat.util.http.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly

以上是关于无法将图像文件从 Android 应用程序发布到托管在 Tomcat 上的 Java servlet的主要内容,如果未能解决你的问题,请参考以下文章

无法从 python 服务器将图像上传到 Firebase 存储

无法使用 java 套接字将图像从 android studio 发送到 pc,filePath 返回 null

如何将图像从 Android 中的 Drawable 附加到彩信?

无法将图像从ImageView上传到Android中的FireBase存储

图像捕获,保存文件... Android / Parse

在 Android 中使用 SVG 作为图像视图的资源