我想要做的是从Amazon S3下载文件。我一直在寻找实现的方法,但是效果不佳。我看到了this question并使用了答案的代码之一,但是它没有用,所以我正在尝试其他方法。
我所做的就是这样。
html
<a href="#" download="{{ file.file.url }}">{{ file.filename }}</a>
当我单击文件名时,它实际上开始下载,但是文件不起作用。它说我们不支持文件类型。
我认为这是因为路径错误。当我在浏览器上检查元素时,路径看起来正确,但是当我下载文件时,文件名就像https__...
而不是https://
我该如何解决?原因是什么? 我目前正在检查它是否可以在本地使用。
我当前的代码 我最终创建了一个视图来下载文件,但是即使在生产环境中,它仍然无法正常工作。文件内容始终为空。对于图像文件,无法打开。
def download_file(request, file_pk):
file = get_object_or_404(File, pk=file_pk)
name = file.file.name
path_to_file = "https://%s/media/%s" % (settings.AWS_S3_CUSTOM_DOMAINm name)
resp = HttpResponse(content_type='application/force-download')
resp['Content-Disposition'] = "attachment; filename=%s" % name
resp['X-Sendfile'] = path_to_file
return resp
答案 0 :(得分:0)
那是因为存储在S3中的文件的元数据设置。
您可以尝试更改要下载的文件的元数据吗?
步骤如下
在S3存储中,选择文件,然后选择[属性]-> [元数据] 然后,添加新的元数据作为“ Content-Deposition”键和“ attachment”值。 下面的链接对于理解非常有用。
https://docs.easydigitaldownloads.com/article/1172-how-do-i-force-files-to-download-in-amazon-s3
然后,您需要像这样更改HTML。
<a href="{{ file.file.url }}" download="filename.extension">{{ file.filename }}</a>
我不确定它是否适用于任何类型的文件。但是当我开发了一个下载jpeg文件的系统时,它就起作用了。