我有一个简单的 Flask Azure-webapp,我希望用户能够上传图像。然后图像存储在 Azure Blob 中。
import os, uuid
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient
try:
print("Azure Blob storage v12 - Python quickstart sample")
# Quick start code goes here
except Exception as ex:
print('Exception:')
print(ex)
connect_str = "XXXXX"
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
container_name = 'kdprivatecontainer'
container_client = blob_service_client.get_container_client(container_name)
# List the blobs in the container
print("\nListing blobs...")
blob_list = container_client.list_blobs()
for blob in blob_list:
print("\t" + blob.name)
我可以通过这种方法看到文件的名称...如何将图像传递到前端网页,同时保持容器为“私有(private)”。
黑暗中的彻底刺探是:但显然不起作用:/
from flask import Flask, render_template
app = Flask(app)
@app.route("/showimg')
def showimage():
blobimage = blob[9].url????
return render_template('showimage.html, img=blobimage)
Any guidance is appreciated. :)
最佳答案
我非常同意@GauravMantri的回答,您需要使用函数generate_container_sas
或generate_blob_sas
,为私有(private)容器中的图像生成带有sas token 的url,作为私有(private)容器中的blob > 适用于 Python 的 Azure Blob 存储 SDK v12。
此外,我认为您可能需要一些可以立即为您工作的示例代码,所以我为它工作。
这是我的示例代码。
from datetime import datetime, timedelta
from azure.storage.blob import generate_container_sas, ContainerSasPermissions
account_name = "<your account name>"
account_key = "<your account key>"
container_name = "<your container name, such as `test`>"
# using generate_container_sas
def get_img_url_with_container_sas_token(blob_name):
container_sas_token = generate_container_sas(
account_name=account_name,
container_name=container_name,
account_key=account_key,
permission=ContainerSasPermissions(read=True),
expiry=datetime.utcnow() + timedelta(hours=1)
)
blob_url_with_container_sas_token = f"https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}?{container_sas_token}"
return blob_url_with_container_sas_token
from azure.storage.blob import generate_blob_sas, BlobSasPermissions
# using generate_blob_sas
def get_img_url_with_blob_sas_token(blob_name):
blob_sas_token = generate_blob_sas(
account_name=account_name,
container_name=container_name,
blob_name=blob_name,
account_key=account_key,
permission=ContainerSasPermissions(read=True),
expiry=datetime.utcnow() + timedelta(hours=1)
)
blob_url_with_blob_sas_token = f"https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}?{blob_sas_token}"
return blob_url_with_blob_sas_token
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/showimg")
@app.route("/showimg/<blob_name>")
def hello_world(blob_name=None):
img_url_with_sas_token = get_img_url_with_blob_sas_token(blob_name)
# Or
# img_url_with_sas_token = get_img_url_with_container_sas_token(blob_name)
return render_template('showimage.html', img_url_with_sas_token=img_url_with_sas_token)
app.run()
我的 templates/showimage.html
非常简单,如下所示。
<html>
<head>
</head>
<body>
<img src="{{img_url_with_sas_token}}" />
</body>
</html>
我的test
容器中有一个名为test_cat2.jpg
的图片,我用它来进行测试,所以结果如下图。
关于python-3.x - 从 Azure Blob 存储、Flask Python、HTML/JS 检索并显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59944361/