Django:如何从S3下载文件

时间:2019-03-25 04:13:37

标签: django amazon-s3

我想要做的是从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

1 个答案:

答案 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文件的系统时,它就起作用了。