Загрузка файла с помощью nginx, django
В настоящее время я пишу небольшой сайт для личного пользования с nginx, использующий uwsgi, django и bootstrap. Все идет гладко, за исключением одного вопроса, который я не могу понять. У меня есть ссылки на скачивание (кнопки) на сайте, и при щелчке должен инициировать загрузку файла. Вот представление, которое выполняется при нажатии кнопки:
@login_required
def download_file(request):
'''
downloads a file given a specified UUID
'''
if request.method == 'GET':
file_uuid = request.GET['file_id']
file_row = Files.objects.get(uuid=file_uuid)
file_name = file_row.file_name
response = HttpResponse()
response['Content-Disposition'] = 'attachment; filename=%s' % file_name
response['X-Accel-Redirect'] = '/media/files/%s' % file_name
return response
else:
return redirect('/files')
/ media / files обслуживается непосредственно nginx как внутреннее местоположение:
location /media/files/ {
internal;
alias /mnt/files/;
}
Как этот вид вызывается с событием onclick, назначенным для каждой кнопки:
$('.download_btn').on('click',function(){
download_file(this.id);
})
function download_file(uuid){
$('.file_id').val(uuid);
$('.get_file').submit();
}
У меня есть форма с одним скрытым полем. Это устанавливается в идентификатор (uuid) кнопки, которая была нажата.
Довольно просто, верно? Моя проблема заключается в том, что при нажатии кнопки загрузки загрузка не начинается правильно. Пользователю не предлагается диалоговое окно сохранения, и файл не начинает автоматическую загрузку (Chrome или Safari). Вместо этого в инструментах отладки я вижу загрузку файлов в локальное хранилище в браузере или в какую-то область памяти (это большие файлы; > 1 ГБ). Я вижу всплеск памяти, и в итоге браузер вылетает. Любая подсказка, что я здесь делаю не так? Исходя из того, что я читал, это должно работать без проблем.