我有以下观点。我通过笔记本电脑浏览器进行测试,下载没有问题。但是,如果我使用文档管理器的浏览器,例如' 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上没有下载管理器,我可以下载该文件。
答案 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