sende-Parameter beim hochladen der Datei
Ich habe dieses Stück code http://pastebin.com/VrMNuxcv, die erfolgreich uploads einer Datei auf den server von meinem android.
Ich Sie schicken ein paar string-Parameter zusammen mit ihm.
Dafür habe ich
conn.setRequestProperty("x-myapp-param1", "Parameter 1 text");
Auf der server-Seite (Servlet DoPsot Methode)
Ich habe versucht, abrufen der string-parameter von
String userId = request.getParameter("myapp-param1");
Aber die
userId is null
Mein code in der client-Teil wird unten gegeben:
URL url = new URL(upLoadServerUri);
conn = (HttpURLConnection) url.openConnection(); //Open a HTTP
//connection to
//the URL
conn.setDoInput(true); //Allow Inputs
conn.setDoOutput(true); //Allow Outputs
conn.setUseCaches(false); //Don't use a Cached Copy
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("ENCTYPE", "multipart/form-data");
conn.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
conn.setRequestProperty("file_name", fileName);
conn.setRequestProperty("x-myapp-param1", "Parameter 1 text");
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"file_name\";filename=\""
+ fileName + "\"" + lineEnd);
dos.writeBytes(lineEnd);
bytesAvailable = fileInputStream.available
();
Server-code:
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String userId = request.getParameter("myapp-param1");
String x_user_id = request.getParameter("x-myapp-param1");
System.out.println("userId getParameter : "+userId +"x_user_id : "+ x_user_id);
System.out.println("request.getHeaderNames();"+request.getHeaderNames());
System.out.println("request.getHeaderNames();"+request.getHeaders("x"));
File filenameImg = null;
List<FileItem> items = null;
try {
items = new ServletFileUpload(new DiskFileItemFactory())
.parseRequest(request);
} catch (FileUploadException e) {
throw new ServletException("Cannot parse multipart request.", e);
}
for (FileItem item : items) {
if (item.isFormField()) {
//Process regular form fields here the same way as
//request.getParameter().
//You can get parameter name by
String fieldname = item.getFieldName();
String fieldvalue = item.getString();
System.out.println("user_id===fieldname======: "+fieldname);
//System.out.println("user_id====fieldvalue=====: "+fieldvalue);
//You can get parameter value by item.getString();
} else {
try{
//Process uploaded fields here.
String filename = FilenameUtils.getName(item.getName());
//Get filename.
String path = GetWebApplicationPathServlet.getContext().getRealPath("/images");
File file = new File(path,filename);
//Define destination file.
item.write(file);
System.out.println("filename: "+filename);
System.out.println("file: "+file);
request.setAttribute("image", file);
filenameImg = file;
//Write to destination file.
// request.setAttribute("image", filename);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei große Probleme:
Den
URLConnection#setRequestProperty()
setzt den HTTP-request header, nicht die HTTP-Anforderung parameter. Das sind zwei völlig verschiedene Dinge. Im Falle vonmultipart/form-data
Anforderungen, die Sie benötigen, um Ihnen zu schreiben als fullworthy multipart-Teil. Sie finden ein ausführliches Beispiel in diese Antwort (überprüfen Sie den Abschnitt Hochladen von Dateien in der Nähe der Unterseite).Im Falle einer HTTP -
multipart/form-data
Anfrage, die Parameter sind nicht verfügbarHttpServletRequest#getParameter()
. Sie müssen Sie behandeln wie multipart Teile und nicht als request-Parameter. Sie können analysieren Sie mit Apache Commons FileUpload, oder wenn Sie bereits auf Servlet 3.0, mitHttpServletRequest#getParts()
. Sie sind bereits mit Apache Commons FileUpload, so dass nur halten, dass ein Teil und loszuwerden unnötigegetParameter()
Anrufe. Die regulären Parameter sind in der secion kommentiert als "Prozess normalen Formular-Felder hier".Überprüfen Sie die Schreibweise
Tun Sie
und
Beachten Sie die fehlenden x - auf der Empfänger-Seite.
Erkannte ich meine Fileupload, indem die appace-mime-Bibliotheken, die Sie unterstützen Entitäten.