मेरे पास एंड्रॉइड में क्लाइंट एप्लिकेशन है जो सर्वर पर फ़ाइलों को भेजने के लिए HttpURLConnection
का उपयोग करता है। फॉर्म-डेटा मानों को पार्स करने के लिए सर्वर Apache Commons FileUpload API का उपयोग करता है।ServletFileUpload # parseRequest (अनुरोध) एक खाली सूची देता है
-----------------------------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);
में है
HttpURLConnection
इस अनुरोध को भेजता है। लौटाई गई सूची खाली है और मुझे फॉर्म-डेटा मान नहीं मिल सकते हैं।
मैं का उपयोग कर जांच की गई: request.getInputStream() बाइट [] एक = नए बाइट [8096]; int आर = 0; ServletInputStream s = request.getInputStream(); स्ट्रिंग सी = ""; जबकि ((आर = एस.एड (ए))! = -1) { सी + = नया स्ट्रिंग (ए) .substring (0, आर); } और डेटा ठीक मिला। समस्या यह है कि कमांड फ़ाइल अपलोड सामग्री को पार्स नहीं कर सकता है। – toto
ठीक है, अगर आप उस 'request.getInputStream()' कॉल को हटाते हैं, तो इसे ठीक से काम करना चाहिए, जैसा कि मेरे उत्तर में समझाया गया है। – BalusC
ठीक है, मुझे लगता है कि आप पहले से किसी भी तरीके से कॉल नहीं कर रहे हैं। इस समस्या का तब मतलब हो सकता है कि आपने उचित सीमा शीर्षलेख सेट नहीं किया है, या जब आपने गलत न्यूलाइन का उपयोग किया था। आप "फाइल अपलोड करने" अनुभाग के तहत http://stackoverflow.com/a/2793153 के नीचे एक ठोस और उचित उदाहरण पा सकते हैं। – BalusC