微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 python Flask 创建下载 API 来下载文件

如何解决如何使用 python Flask 创建下载 API 来下载文件

我有一个 python 代码,它提供了来自 azure blob 存储的图像文件的下载 url。如果我们将此 url 复制粘贴到浏览器中,它只会下载文件。我必须创建一个下载 api,当调用它时将简单地下载文件。以下是我目前拥有的代码

from urllib.request import urlopen
from flask import Flask,jsonify
import uuid
from flask_cors import CORS
from datetime import datetime
from azure.storage.blob import generate_blob_sas,AccountSasPermissions
import datetime
from datetime import timedelta


app = Flask(__name__)
CORS(app)

uid_secret_key = str(uuid.uuid4())

app.secret_key = uid_secret_key

# Make the Wsgi interface available at the top level so wfastcgi can get it.
wsgi_app = app.wsgi_app


@app.route('/download')
def download():
    account_name = "deeusblobstorage"
    container_name = "rperodct"
    blob_name = "face_1_7285.jpg"
    account_key = "hMlIRXCjAomfdrfied8Y5FPwTVnWEkEDuVsw//CQtkiOdcFD/y5wUcxH9Ou7Ni+DtDQFwe23YbZ3Qia9gw=="
    url = f"https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}"
    sas_token = generate_blob_sas(
        account_name=account_name,account_key=account_key,container_name=container_name,blob_name=blob_name,permission=AccountSasPermissions(read=True),expiry=datetime.datetime.utcNow() + timedelta(hours=1)
    )

    url_with_sas = f"{url}?{sas_token}"
    print(url_with_sas)
    urlopen(url_with_sas)


@app.route('/')
def hello_world():
    return jsonify({'Status': 'ok','date': '05.25.21'}),200


if __name__ == '__main__':
    import os

    HOST = os.environ.get('SERVER_HOST','localhost')
    try:
        PORT = int(os.environ.get('SERVER_PORT','5555'))
    except ValueError:
        PORT = 5555
    app.run(HOST,PORT)

/download api 包含从变量名 url_with_sas 中的 azure 容器获取 blob 下载 url 的代码。现在我想以这样的方式制作这个 API,如果我们点击它,它应该自动从 url 下载文件。所以为此我想添加 urlopen(url_with_sas) 来打开网址。但似乎它不起作用。任何人都可以为此提供一些建议。谢谢

解决方法

正如评论中提到的,解决方案是通过 return redirect(url_with_sas) 所以整个函数看起来像这样:

@app.route('/download')
def download():
    account_name = "deeusblobstorage"
    container_name = "rperodct"
    blob_name = "face_1_7285.jpg"
    account_key = "hMlIRXCjAomfDRfied8Y5FPwTVnWEkEDuVsw//CQtkiOdcFD/y5wUcxH9Ou7Ni+DtDQFwe23YbZ3Qia9gw=="
    url = f"https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}"
    sas_token = generate_blob_sas(
        account_name=account_name,account_key=account_key,container_name=container_name,blob_name=blob_name,permission=AccountSasPermissions(read=True),expiry=datetime.datetime.utcnow() + timedelta(hours=1)
    )

    url_with_sas = f"{url}?{sas_token}"
    return redirect(url_with_sas)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。