无法将图像文件从 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的主要内容,如果未能解决你的问题,请参考以下文章