- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 Android 中有一个客户端应用程序,它使用 HttpURLConnection
将文件发送到服务器。服务器使用 Apache Commons FileUpload API 来解析表单数据值。
HttpURLConnection
发送这个请求:
-----------------------------4912995119421
Content-Disposition: form-data; name="deviceid"
9428103
-----------------------------4912995119421
Content-Disposition: form-data; name="countryid"
598
-----------------------------4912995119421
Content-Disposition: form-data; name="number"
98621360
-----------------------------4912995119421
Content-Disposition: form-data; name="file"; filename="2012-12-08 17.42.18.jpg"
Content-Type: image/jpeg
ÿØÿá1 Exif II*
@ ° ª
² ¼ Ä ( 1 Ì 2 Ø i‡ ì %ˆ \ n SAMSUNG GT-S5360L H H S5360LUHLB1 2012:12:08 17:42:18 š‚ î ?‚ ö "ˆ 'ˆ È ? 0220? þ ? ‘ ’ & ’
’ . 0100 @ ° > £ ¤ ¤ ¤ 6 ¤
2012:12:08 17:42:18 2012:12:08 17:42:18
d R98 0100 ( ¤ T. ÿØÿà JFIF ÿÛ C @@ÿÛ
-----------------------------4912995119421--
服务器代码:
String contentType = request.getContentType();
if ((contentType.indexOf("multipart/form-data") == -1)) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
long maxFileSize = (2 * 1024 * 1024);
int maxMemSize = (2 * 1024 * 1024);
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax(maxFileSize);
List fileItems = upload.parseRequest(request);
Iterator i = fileItems.iterator();
//leo primero todas las variables.
int deviceID = 0;
int countryID = 0;
String phoneNumber = "";
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
if (fi.isFormField()) {
String variable = fi.getFieldName();
if (variable.equals("deviceid")) {
deviceID = Integer.parseInt(fi.getString());
} else if (variable.equals("countryid")) {
countryID = Integer.parseInt(fi.getString());
} else if (variable.equals("number")) {
phoneNumber = String.valueOf(Long.parseLong(fi.getString()));
}
}
}
if (deviceID == 0 || countryID == 0 || phoneNumber.equals("")) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
问题出在 List fileItems = upload.parseRequest(request);
行中。返回的列表是空的,我无法获取表单数据值。
最佳答案
如果您事先已经(隐含地)解析了请求主体,那么此时它将为空。 HTTP 请求主体只能读取/解析一次(因为客户端只发送了一次,不会发送多次)。
当您将请求提供给 Commons FileUpload 之前调用以下任何方法时,将隐式读取/解析请求正文:
request.getParameter();
request.getParameterMap();
request.getParameterNames();
request.getParameterValues();
request.getReader();
request.getInputStream();
您需要绝对确保您没有事先调用任何这些方法(还要检查所有 servlet 过滤器以确保)。
如果你已经确定你没有这样做,那么唯一可能的原因就是边界标题不正确和/或使用不正确的换行符(它实际上必须是 CR+LF,因此不仅仅是 LF) .您可以在 Using java.net.URLConnection to fire and handle HTTP requests 的底部找到一个具体且适当的示例。 ,在“上传文件”部分下。
关于java - ServletFileUpload#parseRequest(request) 返回一个空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13881272/
这个问题已经有答案了: How can I upload files to a server using JSP/Servlet? (14 个回答) 已关闭 6 年前。 我正在尝试使用servlet和
更新:刚刚发现this bug看起来像我的问题。 我正在研究可用于纯JSON的客户端框架。我有一个网址映射为: "/books/$id?"(controller:'book', parseReques
我正在为我的 Grails 应用程序使用自定义 SpringSecurityFilter,并且我正在尝试使用公共(public)上传库来处理请求。我能够在过滤器中处理请求,但是一旦它到达我的 Cont
我在 Android 中有一个客户端应用程序,它使用 HttpURLConnection 将文件发送到服务器。服务器使用 Apache Commons FileUpload API 来解析表单数据值。
Apache 在尝试上传文件时返回此错误(我只保留了堆栈跟踪的第一行和根本原因): HTTP Status 500 - type Exception report message descriptio
这个问题在这里已经有了答案: How to upload files to server using JSP/Servlet? (14 个回答) 5年前关闭。 我上传了我浏览的文件 input typ
我是安卓新手。好吧,我正在尝试将数据发送到解析云,但我收到此异常。 com.parse.ParseRequest$ParseRequestException: unauthorized 这是 Main
查看了该主题的一些现有答案后,我仍然无法弄清楚我可能做错了什么...... 我的单元测试中有以下请求声明: final MockMultipartHttpServletRequest mockRequ
我已经使用 parse.com 创建了一个示例应用程序 jar 。本项目中Buid版本SDK是 22(它运行良好)。但是在将其更改为 23 之后,我在编译应用程序时遇到了一些问题。我试图清理项目,使缓
我一直在四处寻找,但没有一个解决方案能解决我的问题。例如:添加 parseLogInterceptor,更改版本。我正在尝试测试我的应用程序以连接到我的本地解析服务器,但它给了我: com.parse
每当我尝试进行任何查询时,解析服务器都会出现 I/O 失败。 我尝试过使用另一台服务器、检查我的连接、使用其他设备、启动一个新的 Android 项目,但似乎没有任何效果。 public class
我正在编写一个网络应用程序,我想将一个文件上传到 servlet。我读到我可以使用 ServletFileUpload.parseRequest(request)它适用于一台计算机。但是当我尝试在另一
我正在使用 org.apache.commons.fileUpload.FileItem 和其他相关类将文件从本地机器上传到服务器(尽管目前测试两台机器是相同的)。 我将 .jsp 文件作为 UI 和
正在开发一个简单的文件上传程序。我必须使用 jakarta.servlet.* 类,因为我使用的是 Tomcat v10。我在 parseRequest(request) 行遇到编译时错误。 代码:
我想搜索数据库中的一行。我把这个查询放在我的代码中 ParseQuery query_names = ParseQuery.getQuery("PhoneBook"); que
您好,我正在开发使用解析云的 Android 应用程序。在我尝试从解析中获取数据后,我已经注册到系统中。 但我每次都会遇到异常 com.parse.ParseRequest$ParseRequestE
好的,这是我关于这个主题的第 N 个问题,我对 Grails 感到非常沮丧。请快速浏览one of my earlier questions更多细节。 除其他外,我的问题是在测试时将 JSON 格式的
我正在尝试运行在 Parse 服务器中使用匿名登录的应用程序,但我在日志猫中收到以下内容。 该应用程序仅在我的一台装有 Android Oreo 8.1 的设备上运行,但当在另一台装有 Android
我正在按照描述的方式通过多部分过滤器处理文件上传 here .我创建了一个 WAR 文件并部署在 Weblogic 10.3.3 服务器上并出现错误: <[ServletContext@260
我在后端使用 Parse DB,使用了 Login、SaveInBackground、FindInBackGround 等方法,大多数功能都在工作,除了一个使用 SaveInBackground(){
我是一名优秀的程序员,十分优秀!