我有以下看法。我通过笔记本电脑浏览器进行测试,下载过程中没有问题。但如果我在iphone上使用文档管理器(如“Documents”)的浏览器,请求的文件就会加载到浏览器中。我错过了什么
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上没有下载管理器的情况下,我就可以下载文件了
多亏了Sayse,技巧在于在content_type头中指定mimetypes
相关问题 更多 >
编程相关推荐