我想用以下参数构造一个多部分请求:name(字符串)、email(字符串)和fileupload(文件)。我使用下面的Java代码(在Android中工作)。
getRequestLine()函数将打印
POST http://www.myurl.com/upload HTTP/1.1
所以客户端上的一切看起来都很好,但我的服务器(Django/Apache)将其作为GET请求读取,没有GET参数-request.method
生成'GET',request.GET.items()
生成一个空字典。
我做错了什么?我实际上不知道如何正确地设置多部分参数-我使用的是猜测-所以这可能是问题所在。
public void SendMultipartFile() {
Log.e(LOG_TAG, "SendMultipartFile");
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.myurl.com/upload");
File file = new File(Environment.getExternalStorageDirectory(),
"video.3gp");
Log.e(LOG_TAG, "setting up multipart entity");
MultipartEntity mpEntity = new MultipartEntity();
ContentBody cbFile = new FileBody(file);
mpEntity.addPart("fileupload", cbFile);
Log.i("SendLargeFile", "file length = " + file.length());
try {
mpEntity.addPart("name", new StringBody(name));
mpEntity.addPart("email", new StringBody(email));;
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
Log.e(LOG_TAG, "UnsupportedEncodingException");
e1.printStackTrace();
}
httppost.setEntity(mpEntity);
Log.e(LOG_TAG, "executing request " + httppost.getRequestLine());
HttpResponse response;
try {
Log.e(LOG_TAG, "about to execute");
response = httpclient.execute(httppost);
Log.e(LOG_TAG, "executed");
HttpEntity resEntity = response.getEntity();
Log.e(LOG_TAG, response.getStatusLine().toString());
if (resEntity != null) {
System.out.println(EntityUtils.toString(resEntity));
}
if (resEntity != null) {
resEntity.consumeContent();
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2条答案
按热度按时间bweufnob1#
看起来你可能找错地方了。你正在发布,但是在请求中寻找数据。GET:
尝试在“request.post”和“request.files”中查找QueryDict ...
http://docs.djangoproject.com/en/1.6/ref/request-response/#django.http.HttpRequest.FILES
juud5qan2#
我有同样的问题与MultipartEntity请求。我需要上传图像到服务器。所以我做了HttpURLConnection类的MultipartEntity请求。我把我的代码在这里,认为它可以为您有用。你需要设置URL路径和文件路径。为此使用方法把。