2016-01-25 128 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 
相關問題