从远程 url 流式传输文件到 Django 视图响应

Stream file from remote url to Django view response

有什么方法可以使用 Django Response 从远程 URL 流式传输文件(无需在本地下载文件)?

# view.py
def file_recover(request, *args, **kwargs):    
    file_url = "http://remote-file-storage.com/file/111"

    return StreamFileFromURLResponse(file_url)

我们有文件存储(文件可以很大——1 GB 或更多)。我们无法共享下载 url(存在安全问题)。文件流可以显着 通过将下载流转发到 Django 响应来提高下载速度。

Django 内置了 StreamingHttpResponse class which should be given an iterator that yields strings as content. In example below I'm using requests Raw Response Content

import requests
from django.http import StreamingHttpResponse


def strem_file(request, *args, **kwargs):
    r = requests.get("http://host.com/file.txt", stream=True)

    resp = StreamingHttpResponse(streaming_content=r.raw)

    # In case you want to force file download in a browser 
    # resp['Content-Disposition'] = 'attachment; filename="saving-file-name.txt"'

    return resp