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