我正在使用Django 1.5
中允许我下载文件的视图。下载过程由HTML
页面中的按钮触发,如下所示:
<a href="/file/download/{{ file.name }}/"><input type="button" value="Download!" /></a>
网址指向管理下载的视图:
def filedownload(request, filename):
down_file = File.objects.get(name = filename)
file_path = MEDIA_ROOT+str(down_file.file)
file_name = down_file.filecomplete()
if not Transaction.objects.filter(user = request.user, file = down_file):
transaction = Transaction.objects.create(date = datetime.now(), user = request.user, file = down_file, vote = False)
transaction.save()
fp = open(file_path, 'rb')
response = HttpResponse(fp.read())
fp.close()
type, encoding = mimetypes.guess_type(file_name)
if type is None:
type = 'application/octet-stream'
response['Content-Type'] = type
response['Content-Length'] = str(os.stat(file_path).st_size)
if encoding is not None:
response['Content-Encoding'] = encoding
if u'WebKit' in request.META['HTTP_USER_AGENT']:
filename_header = 'filename=%s' % file_name.encode('utf-8')
elif u'MSIE' in request.META['HTTP_USER_AGENT']:
filename_header = ''
else:
filename_header = 'filename*=UTF-8\'\'%s' % urllib.quote(file_name.encode('utf-8'))
response['Content-Disposition'] = 'attachment; ' + filename_header
return response
我想要做的就是在用户点击downlad按钮后立即将用户重定向到成功页面,但我找不到办法。
由于这是一个学校项目,我并不担心下载中断或不成功。
答案 0 :(得分:3)
他是您运行代码时必须遵循的所有步骤:
获取允许使用OnSuccess和OnFailure回调进行下载的jQuery File Download。
这是一个使用带有promises的插件源的简单用例演示。该演示页面还包含许多其他“更好的用户体验”示例。
$.fileDownload('some/file.pdf')
.done(function () { //redirect });
这是一个使用带有promises的插件source的简单用例演示。 demo page还包括许多其他“更好的用户体验”示例。
答案 1 :(得分:1)
您可以将href
的{{1}}设置为要显示的下载确认页面,传递文件名,然后在确认页面的模板中设置input
} event重定向到实际下载。
onload
答案 2 :(得分:1)
您可以使用ajax请求等待下载完全成功。
在您看来:
$.fileDownload('some/file.pdf')
.done(function () { //redirect
window.location = '/link';
})
.fail(function () { alert('File download failed!'); });
答案 3 :(得分:1)
如何使用上一段代码:
首先在链接中添加名称,ID或类 下载链接
next:这里我使用id来识别链接#a_d *
<script type="text/javascript">
$(document).on("click", "#a_d", function () {
$.fileDownload(.done(function () { //redirect
window.location = '/link';})
});
});
</script>
完成!!