将文件从Android上传到DJango。 Request.FILES始终为空

时间:2015-12-14 17:26:18

标签: php android python django

我尝试使用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.FILESrequest.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 *,而不是。

1 个答案:

答案 0 :(得分:1)

来自Django documentation

  

请注意,request.FILES仅包含请求方法的数据   是POST,发布请求的<form>具有该属性   enctype="multipart/form-data"。否则,request.FILES将为空。

当您按照自己的意愿发送数据时,Django可能会在request.BODY而不是request.FILES中找到内容。

所以你必须使用MultipartEntityBuilder或手动设置你的请求(例如通过操纵标题),以便Django将其识别为multipart/form-data,但我无法告诉你这将有效