簡體   English   中英

如何創建下載 API 以使用 python flask 下載文件

[英]How to create download API to download files using python flask

我有一個 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)它將打開 url。 但似乎它不起作用。 任何人都可以為此提出一些建議。 謝謝

正如評論中提到的解決方案是通過return redirect(url_with_sas)所以整個 function 看起來像這樣:

@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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM