2016-01-25 121 views
1

我有以下的看法。我通过笔记本电脑浏览器测试它,下载没有问题。但是,如果我使用iPhone上的文档管理器的浏览器,那么请求的文件将被加载到浏览器中。我在这里错过了什么?django:手机浏览器不会触发下载,而是将文件加载到浏览器

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个段,使得米段的存在下足以恢复该文件。 servefiles视图从存储后端检索段,并恢复文件并最终提供它们。我在桌面浏览器上提出请求没有任何问题,但是在iPhone上没有下载管理器,我无法下载文件。

+0

不能完全确定指定的MIME类型,但你可能需要设置'content_type' ...'的HttpResponse(CONTENT_TYPE = '应用/ file_type_here') ' – Sayse

+1

@Sayse非常有意义,因为桌面浏览器上的下载文件也在浏览器中打开,我会试试看。 – Miind

+1

@Sayse这是要走的路,添加使用mimetypes_guess_type()作为content_type关键字的参数,就是这样。谢谢 – Miind

回答

1

由于Sayse的伎俩是在CONTENT_TYPE头

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 
相关问题