我目前正在写一个小的个人使用的网站与nginx服务,利用uwsgi,django和bootstrap。 除了我无法弄清楚的一个问题外,一切都进展顺利。 我有网站上的下载链接(button),点击时应该启动文件下载。 这里是按下button时执行的视图:
@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/; }
如何使用分配给每个button的onclick事件调用此视图:
$('.download_btn').on('click',function(){ download_file(this.id); }) function download_file(uuid){ $('.file_id').val(uuid); $('.get_file').submit(); }
我有一个单一的隐藏领域的forms。 这被设置为被按下的button的id(uuid)。
很简单的权利? 我的问题是,当下载button被按下时,下载不能正确启动。 用户不会提示保存对话框,文件也不会自动下载(Chrome或Safari)。 相反,在debugging工具中,我可以看到文件下载到浏览器中的本地存储或某些内存位置(这些是大文件;> 1GB)。 我看到内存膨胀,最终浏览器会崩溃。 任何线索我在做什么错在这里? 基于我一直在阅读,这应该是没有问题的工作。