2015-12-14 64 views
3

我想用我的Android應用程序下面的代碼上傳文件的Django:將文件從Android上傳到DJango。 Request.FILES總是空

  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); 

我發現stateing,以前的代碼工作在其他服務器上的許多職位像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") -as在其他的答案,但表示同樣的事情發生。

大概我應該看看其他地方,而不是在request.FILES。有沒有人有任何線索如何解決這個問題?

編輯

我已經測試MultipartEntityBuilder和它的作品,但是,這意味着增加額外的jar *的項目,我寧願不要。

+0

嘗試'MultipartEntity'而不是 – RafaelC

+0

@RafaelCardoso感謝您的評論。我編輯了這個問題來回復你的評論。 – Storo

回答

1

從Django的documentation

注意request.FILES將只包含數據,如果請求方法 爲POST和發佈請求的<form>具有屬性 enctype="multipart/form-data"。否則,request.FILES將爲空。

當您發送因爲你在做數據,Django的可能會發現在request.BODY,而不是request.FILES內容。

因此,您必須使用MultipartEntityBuilder或手動設置您的請求(例如通過操縱標頭),以便Django將其識別爲multipart/form-data,但我無法告訴您這會起作用。

+0

如果它是在'request.body'上就不會有問題,但問題是'len(request.body)'是'0',所以我猜測它不在那裏。你知道我如何手動操作請求嗎? – Storo

+1

最後,我不得不使用'MultipartEntityBuilder',因爲手動設置請求太麻煩了。 – Storo