Я пытаюсь создать zip-файл, полный WAV-файлов, и загрузить его из внешнего интерфейса React, который делает запрос AJAX к конечной точке Django.
Вот что я до сих пор:
def saveZipFile(request):
if request.method == 'POST':
in_memory = BytesIO()
zipFile = ZipFile(in_memory, "a")
keys = generate_piano_keys(3)
# activeNotes = {}
for index, key in enumerate(keys):
nameOfFile = request.POST.get(key)
if(nameOfFile != None):
zipFile.write('./{}'.format(nameOfFile), arcname="{}.wav".format(key))
for file in zipFile.filelist:
file.create_system = 0
zipFile.close()
downloadFile = in_memory.getvalue()
in_memory.seek(0)
response = HttpResponse(in_memory.getvalue(), content_type='application/zip')
response["Content-Disposition"] = 'attachment; filename="sample_map.zip"'
return response
Я получаю следующий ответ от сервера Django: "POST /test/saveZipFile HTTP/1.1" 200 61894
Я попытался отладить response.content, и это те же байты, что и байты, которые я записываю в переменную zipFile, это означает, что она записывается в ответ. Я попытался использовать application/force-download
вместо application/zip
в content_type.
Есть ли что-то, чего мне не хватает, поскольку в каждой ветке и статье написано, что это должно выглядеть так.
Запрос выполняется через ax ios:
const res = await axios({
method: "POST",
url: window.location.href + "saveZipFile",
data: data,
processData: false,
contentType: false,
headers: {
"X-CSRFToken": token
}
});
объект данных - это просто набор имен файлов.