Я пытаюсь отправить аудиофайл через 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
.
Кто-нибудь знает, что происходит и / или может помочь мне с проблемой?