-1

经过身份验证的用户在帐户页面下有一些数字内容,应该能够下载它。我不想提供直接的 HTML 链接,而只是在单击下载时提供文件。我看过:

Django 书:第 13 章

Django下载文件不起作用

Django下载文件为空

这似乎是相关的解决方案并且对其他人有用。然而,我看到的是,它似乎在做正确的事情: - 首先,没有打印错误或崩溃 - 将生成的 HttpResponse 转储到标准输出,显示二进制数据的存在。

但它不会下载任何内容,浏览器也不会询问用户是否认为这是可以安全下载的内容,就像您从网站下载某些 PDF 一样。

我倾向于认为,这可能是一个 settings.py 问题,被设置为可能不允许下载的安全措施。但它可能是其他任何东西。

这是我所拥有的一个例子:

filePath = os.path.abspath('static/media/files/' + fileName)
wrapper = FileWrapper(open(filePath), 'r')
contentType = mimetypes.guess_type(filePath)[0]
response = HttpResponse(wrapper, content_type = contentType)
response['Content-Length'] = os.path.getsize(filePath)
response['Content-Disposition'] = 'attachment; filename=%s/' % smart_str(os.path.basename(filePath))

return response

我尝试过的其他事情:

with open(filePath, 'rb') as f:
    return HttpResponse(f.read(), mimetype='image/jpeg')

蟒蛇:2.7.4

点冻结:

Cartridge==0.8.2
Django==1.5.4
Fabric==1.8.0
Mezzanine==1.4.16
PIL==1.1.7
Pillow==2.2.1
Pillow-PIL==0.1dev
South==0.8.2
argparse==1.2.1
bleach==1.2.2
cartridge-stripe==0.1.3
distribute==0.6.34
django-zebra==0.4.3
ecdsa==0.9
filebrowser-safe==0.2.30
grappelli-safe==0.2.22
gunicorn==18.0
html5lib==0.95
oauthlib==0.6.0
paramiko==1.12.0
pisa==3.0.33
psycopg2==2.5.1
pycrypto==2.6
pytz==2013.7
requests==1.2.3
requests-oauthlib==0.3.3
stripe==1.9.6
wsgiref==0.1.2
4

1 回答 1

0

我认为你的路径有问题。

这是否显示正确的路径?>>

filePath = os.path.abspath('static/media/files/' + fileName)

我问这个是因为您指向的媒体目录位于与您的views.py 文件相同级别的静态文件夹下。

如果它是正确的路径,那意味着你还有另一个误解问题。Django 在生产时既不提供来自 django 模块下的静态/媒体路径的媒体也不提供静态文件。即使在 DEVELOPMENT中,您的媒体文件也必须位于 settings.MEDIA_ROOT 显示的位置。

您可以通过调试这些行来检查您的路径正确性,我认为问题在于它,因为其他一切似乎都很好。

注意:也应该有浏览器问题。也检查一下。

于 2013-10-22T05:33:33.697 回答