将文件从远程URL流到Django视图响应

Ale*_*x T 1 django 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)
Run Code Online (Sandbox Code Playgroud)

我们有文件存储空间(文件可能很大-1 GB或更多)。我们无法共享下载网址(存在安全问题)。通过将下载流转发到Django响应,文件流可以大大提高下载速度。

Ale*_*x T 8

Django内置了StreamingHttpResponse类,应为其提供一个迭代器,该迭代器生成字符串作为内容。在下面的示例中,我正在使用requests 原始响应内容

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
Run Code Online (Sandbox Code Playgroud)