Django内联下载未在浏览器中正确显示文件名
我遇到了一个我无法解释的奇怪现象,除了它是一个内联的,而不是一个附件Django内联下载未在浏览器中正确显示文件名,django,Django,我遇到了一个我无法解释的奇怪现象,除了它是一个内联的,而不是一个附件 def respond_as_inline(request, file_path, original_filename, ranged=False): # https://stackoverflow.com/questions/36392510/django-download-a-file # https://stackoverflow.com/questions/27712778/video-plays-in
def respond_as_inline(request, file_path, original_filename, ranged=False):
# https://stackoverflow.com/questions/36392510/django-download-a-file
# https://stackoverflow.com/questions/27712778/video-plays-in-other-browsers-but-not-safari
# https://stackoverflow.com/questions/720419/how-can-i-find-out-whether-a-server-supports-the-range-header
filename = os.path.join(file_path, original_filename)
if os.path.exists(filename):
mtype, encoding = mimetypes.guess_type(original_filename)
if mtype is None:
mtype = 'application/octet-stream'
with open(filename, 'rb') as fh:
if ranged:
response = RangedFileResponse(request, file=open(filename, 'rb'), as_attachment=False, filename=original_filename)
response["Content-Type"] = mtype
else:
response = HttpResponse(fh.read(), content_type=mtype)
response['Content-Disposition'] = 'inline; filename=%s'% original_filename
return response
else:
print("File not found")
raise Http404
现在,除了使用内联附件,浏览器显示的文件名是url名称(UUID),而不是文件名(例如,原始文件名)之外,一切正常
如果我将其更改为附件,则在下载时会检测到/使用正确的文件名
谁有好的答案/解决方案
不,根据设计,这是内联的,因此PDF、图形等可以在浏览器中查看。如果我可以将其作为附件,默认设置是保存到磁盘。这对平板电脑没有帮助。好吧,我怀疑这一点,但从技术上讲,一个内联的“附件”,虽然在标题中包含一个文件名,但被浏览器视为来自URL。因此URL实际上(imho)覆盖了文件名 所以这在技术上不是Django的问题,而是web浏览器的问题 此堆栈溢出线程: 把我放在“正确”的轨道上 而不是http://servername/download/(uuid) 我已将URL改写为: http://servername/download/filename?UUID=(uuid) 该文件名显示在浏览器中,但Django实际上并未使用。UUID是服务器使用的唯一数据。所以,这从美容上解决了这个问题 我不喜欢这个解决方案,但它很简单,而且有效 但如果有人有更优雅的解决方案,或者想指出一些问题,请随时