我尝试使用Android应用程序上的以下代码将文件上传到Django:
InputStreamEntity reqEntity = new InputStreamEntity(new FileInputStream(screenshotFile), -1);
reqEntity.setContentType("application/octet-stream");
reqEntity.setChunked(true);
HttpPost httpPost = new HttpPost(serverAddress);
httpPost.setEntity(reqEntity);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(httpPost);
我发现很多帖子都说明以前的代码可以在PHP等其他服务器上运行,但由于某种原因,request.FILES
字典是空的,因此,我无法做任何事情。上传的文件。下一个方法可以帮助我检查request.FILES
和request.POST
(也是空)
以下
@csrf_exempt
def upload_file(request):
print request.FILES
print request.POST
return HttpResponse("")
我也尝试将InputStreamEntity reqEntity = new InputStreamEntity(new FileInputStream(screenshotFile), -1)
的使用替换为FileEntity reqEntity = new FileEntity(screenshotFile, "application/octet-stream")
- 在其他答案中说明 - 但同样的事情发生了。
可能我应该在其他地方寻找而不是request.FILES
。有没有人知道如何解决这个问题?
修改
我已经测试了MultipartEntityBuilder
并且它有效,但这意味着要向项目中添加额外的jar *,而不是。
答案 0 :(得分:1)
来自Django documentation:
请注意,
request.FILES
仅包含请求方法的数据 是POST
,发布请求的<form>
具有该属性enctype="multipart/form-data"
。否则,request.FILES
将为空。
当您按照自己的意愿发送数据时,Django可能会在request.BODY
而不是request.FILES
中找到内容。
所以你必须使用MultipartEntityBuilder
或手动设置你的请求(例如通过操纵标题),以便Django将其识别为multipart/form-data
,但我无法告诉你这将有效