【问题标题】:Django/Mezzanine/Cartridge: Providing Non-HTML DownloadDjango/Mezzanine/Cartridge:提供非 HTML 下载
【发布时间】:2013-10-30 17:11:11
【问题描述】:

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

Django Book: Chapter 13

Django download file not working

Django download file empty

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

但它不会下载任何内容,浏览器也不会询问用户是否认为这是可以安全下载的内容,就像您从网站下载某些 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')

Python: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

【问题讨论】:

  • 我在基于类的视图中使用它。我将其更改为视图函数,DjangoBook: Chapter 13 中的简单代码似乎可以工作。

标签: django download mime-types mime


【解决方案1】:

我认为你的路径有问题。

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

filePath = os.path.abspath('static/media/files/' + 文件名)

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 2017-05-31
    • 2017-09-22
    • 2013-03-25
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多