Загрузка файла с помощью 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 ГБ). Я вижу всплеск памяти, и в итоге браузер вылетает. Любая подсказка, что я здесь делаю не так? Исходя из того, что я читал, это должно работать без проблем.

0 ответов

Другие вопросы по тегам