Django request.FILES получает имя, имя файла, но не файл (blob) - PullRequest
2 голосов
/ 02 мая 2020

Я пытаюсь отправить аудиофайл через POST-запрос на сервер (aws, ec2), и я использую Django, но мой запрос. ФАЙЛЫ не получают файл BLOB-объекта, но он ДЕЛАЕТ получить ключ и имя файла. Все работало нормально, когда я запустил это на localhost.

Как я могу получить файл?

Я включаю свой веб-сайт на chrome: // flags / # unsafely-Treat-insecure -origin-as-secure, чтобы я мог получить доступ к микрофону.

Использование Recorder Js для создания объекта Blob, содержащего записанный звук в формате WAV.

Main. js

rec.exportWAV(function(blob){
...
var fd = new FormData();
fd.append('text', speech);
fd.append('audio', blob, 'test.wav');
$.ajax({
 type: 'POST',
 enctype: 'multipart/form-data',
 url: url,
 data: fd,
 processData: false,
 contentType: false,
 success: function(response) {
  console.log(response);
 }
})
...

речь - это строка,

блоб в консоли - это блоб {размер: 221228, тип: "audio / wav"}, поэтому он существует.

представления .py:

@csrf_exempt
def get_blob(request):
    thislist = []
    for key in request.POST:
       thislist.append(request.POST.get(key))
    for key in request.FILES:
       thislist.append(request.FILES.get(key).name)

    json_stuff = json.dumps({"check": thislist})
    return HttpResponse(json_stuff, content_type="application/json")

Я пробовал с и без enctype, не имеет значения. Я попытался установить для contentType значение multipart / form-data, без разницы.

Кажется, что данные формы отправляются правильно, потому что я могу правильно передать речь (request.POST).

И я могу получить ключ из request.FILES ('audio') и получить имя файла ('test.wav').

Если я попытаюсь request.FILES['audio'].read(), он скажет MultiValueDictError.

Если я попытаюсь request.FILES.get('audio').read(), он скажет AttributeError, у объекта 'NoneType' нет атрибута 'read'.

Когда я печатаю request.POST, я получаю словарь с 'text': любой текст, который я произнес .

Когда я печатаю request.FILES, я получаю пустой словарь, хотя могу получить ключ и имя файла через for key in request.FILES: и request.FILES['audio'].filename.

Кто-нибудь знает, что происходит и / или может помочь мне с проблемой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...