django:移动浏览器不会触发下载而是将文件加载到浏览器中

时间:2016-01-25 15:25:25

标签: iphone django

我有以下观点。我通过笔记本电脑浏览器进行测试,下载没有问题。但是,如果我使用文档管理器的浏览器,例如' Documents'在iphone上,同一个请求的文件被加载到浏览器中。我在这里缺少什么?

def servefiles(request, segmentID):
segments = []
obj = MainFile.objects.filter(owner=request.user)
file_name = MainFile.objects.get(file_id=segmentID).file_name
if request.method == 'GET':
    hosts = settings.HOSTS
    for i in hosts:
        try:
            url = 'http://' + i + ':8000/foo/' + str(segmentID)
            r = requests.get(url, timeout=1, stream=True)
            if r.status_code == 200:
                segments.append(r.content)
        except:
            continue
    instance = SeIDA('test', x=settings.M, y=settings.N)
    docfile = instance.decoder(segments)
    response = HttpResponse()
    response.write(docfile)
    response['Content-Disposition'] = 'attachment; filename={0}'.format(file_name)
    return response

注意:如果您可能想知道,SeIDA模块将数据编码到n个段上,这样m个段的存在就足以恢复文件。 servefiles视图从存储后端检索段并恢复文件并最终为它们提供服务。我在桌面浏览器上发出请求没有问题,但是iphone上没有下载管理器,我可以下载该文件。

1 个答案:

答案 0 :(得分:1)

感谢Sayse,诀窍在于指定content_type标题中的mimetypes

import mymetypes

response = HttpResponse(content_type=mimetypes.guess_type(file_name))
response.write(docfile)
response['Content-Disposition'] = 'attachment; filename={0}'.format(file_name)
return response
相关问题