2015-12-14 3 views
3

Я пытаюсь загрузить файл в Django, используя следующий код на моем Android приложения:Загрузка файла с 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.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") -по заявил в других answers- но такой же бывает.

Возможно, я должен искать в другом месте, а не в request.FILES. Кто-нибудь знает, как это решить?

EDIT

Я уже опробовал MultipartEntityBuilder и он работает, но это означает, что для добавления дополнительных банок * в проект, и я бы не хотел.

+0

Попробуйте 'MultipartEntity' вместо – RafaelC

+0

@RafaelCardoso Спасибо, что комментировали. Я отредактировал вопрос, чтобы ответить на ваш комментарий. – Storo

ответ

1

От Джанго 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) 'is' 0', поэтому я предполагаю, что это не так. Вы знаете, как я могу вручную манипулировать запросом? – Storo

+1

В конце концов, мне пришлось пойти с 'MultipartEntityBuilder', потому что установка вручную запроса была слишком сложной. – Storo

Смежные вопросы