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上沒有下載管理器,我無法下載文件。
不能完全確定指定的MIME類型,但你可能需要設置'content_type' ...'的HttpResponse(CONTENT_TYPE = '應用/ file_type_here') ' – Sayse
@Sayse非常有意義,因爲桌面瀏覽器上的下載文件也在瀏覽器中打開,我會試試看。 – Miind
@Sayse這是要走的路,添加使用mimetypes_guess_type()作爲content_type關鍵字的參數,就是這樣。謝謝 – Miind