Django 直接从外部存储提供文件

sea*_*olf 7 python django google-cloud-storage google-cloud-platform

我有一个基于 Google Cloud Platform 构建的 Django 项目。我们使用的是 Django 的身份验证系统,并且大多数(几乎所有)用户都没有在 GCP 项目中设置凭据,因此所有文件身份验证都需要基于 Django 而不是 GCP。

我们的文件存储后端配置非常基本,文件按预期成功上传到 GCS:

DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'
GS_BUCKET_NAME = 'my-bucket'
Run Code Online (Sandbox Code Playgroud)

为文件生成的 URL 具有以下形式(同样,正如预期的那样):

https://storage.googleapis.com/my-bucket/my-document.txt
Run Code Online (Sandbox Code Playgroud)

问题是这个存储桶不能公开读取,因为文件具有基于 Django 权限系统中设置的规则的访问控制,每个用户都不同。

如何让 Django 提供文件而不是 GCS 提供的文件?

想到的一个想法是让视图从 GCS 加载文件并将它们传递给请求的客户端,但我怀疑这不会很好地处理大文件,因为我需要将整个文件加载到本地内存(坏)或以块的形式加载文件并将它们以这些块的形式写入响应流,但不知道这是否可以在 Django 中完成。

Dus*_*ram 3

如果您的应用程序决定对文件的访问(通过 Django 的身份验证系统),那么您必须执行您所描述的传递方法。

如果文件很大,您可以流式传输响应,而不是立即加载和发送整个响应 - 请参阅django.http.StreamingHttpResponse