FineUploader通过python flas深入了解Azure Blob存储的使用情况

2024-09-28 22:41:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要详细的信息(代码示例将不胜感激)有关配置精细上载程序的过程,以便与azureblob存储一起工作。在

目前我面临的问题是如何理解控制流和精细上载程序的整体行为。我已经审查了在罚款上传网站的文件,但我需要更多的信息描述没有知识假设。在

目前,我的解决方案架构如下:

我的解决方案由服务器(SRV)、客户端(CL)和azureblob存储容器(AC)组成。我想做的是让CL上传jpg文件到AC,为了这样做,我目前正在为CL提供blob存储容器的SAS签名。在

我目前无法这样做(我想这可能无法正确实现)。来自fine uploader的GET请求的处理程序如下所示:

@login_required
@app.route('/sas', methods=['GET'])
def sas():
    container_name = '/asilverman/picdepot/'
    sas = SharedAccessSignature(account_name=app.config['AZURE_ACCOUNT'],account_key=app.config['AZURE_KEY'])
    access_policy = AccessPolicy()
    access_policy.start =   '2015-08-22T21:00:00Z'   #(datetime.datetime.utcnow() + datetime.timedelta(seconds=-120)).strftime('%Y-%m-%d') #T%H:%M:%SZ
    access_policy.expiry =  '2015-08-25T21:00:00Z'   #(datetime.datetime.utcnow() + datetime.timedelta(seconds=120)).strftime('%Y-%m-%dT%H:%M:%SZ')
    access_policy.permission = 'w'
    sap = SharedAccessPolicy(access_policy)
    sas_token = sas.generate_signed_query_string(container_name, 'c', sap)
    return request.args['bloburi'] + '?' + sas_token   

我的主要Blob服务端点是:https://asilverman.blob.core.windows.net/

我希望存储图片文件的容器的名称是:picdepot

我的高级上载程序配置如下:

^{pr2}$

我的CORS配置如下:

    Storage Account: https://asilverman.blob.core.windows.net/
Cors.CorsRules.Count         : 1
corsRule[index]              : 0
corsRule.AllowedHeaders      : Content-Type
corsRule.AllowedHeaders      : Access-Control-Allow-Origin
corsRule.AllowedHeaders      : x-ms-*
corsRule.AllowedMethods      : Get, Put, Delete
corsRule.AllowedOrigins      : *
corsRule.ExposedHeaders      : Access-Control-Allow-Origin
corsRule.MaxAgeInSeconds     : 432000
DefaultServiceVersion        : 2013-08-15
HourMetrics.MetricsLevel     : None
HourMetrics.RetentionDays    :
HourMetrics.Version          : 1.0
Logging.LoggingOperations    : None
Logging.RetentionDays        :
Logging.Version              : 1.0
MinuteMetrics.MetricsLevel   : None
MinuteMetrics.RetentionDays  :
MinuteMetrics.Version        : 1.0
New Properties:    
Cors.CorsRules.Count         : 1
corsRule[index]              : 0
corsRule.AllowedHeaders      : *
corsRule.AllowedMethods      : Get, Put, Delete
corsRule.AllowedOrigins      : *
corsRule.ExposedHeaders      : *
corsRule.MaxAgeInSeconds     : 432000
DefaultServiceVersion        : 2013-08-15
HourMetrics.MetricsLevel     : None
HourMetrics.RetentionDays    :
HourMetrics.Version          : 1.0
Logging.LoggingOperations    : None
Logging.RetentionDays        :
Logging.Version              : 1.0
MinuteMetrics.MetricsLevel   : None
MinuteMetrics.RetentionDays  :
MinuteMetrics.Version        : 1.0

Tags: 文件程序nonedatetimeaccessversionloggingpolicy
1条回答
网友
1楼 · 发布于 2024-09-28 22:41:50

I was unable to do so currently ( I assume this could be not implemented correctly).

return request.args['bloburi'] + '?' + sas_token   

@asilveman,如果你能提供这个实现的输出就更好了,据我了解,URL的标准格式是:

^{pr2}$

这里的qry_string是我们需要生成的共享访问签名url。在

供您参考的代码段

from azure.storage import AccessPolicy
 from azure.storage.sharedaccesssignature import (
 SharedAccessPolicy,
 SharedAccessSignature,
 )

 DEV_STORAGE_ACCOUNT_NAME ="xxxxx"
 DEV_STORAGE_ACCOUNT_KEY ="xxxxx"
 CONTAINER_NAME='xxxxx'
 STORAGE_URL = 'xxxxx'

 def generate_signature_blob(dev_storage_account_name,dev_storage_account_key,container_name):
 sas = SharedAccessSignature(account_name=dev_storage_account_name,account_key=dev_storage_account_key)
 accss_plcy = AccessPolicy()
 accss_plcy.expiry = '2016-10-12'
 accss_plcy.permission = 'w'
 sap = SharedAccessPolicy(accss_plcy)
 sasToken = sas.generate_signed_query_string(container_name,'container',sap)
 return sas._convert_query_string(sasToken).replace("container","c")

生成共享访问签名url:

qry_string = generate_signature_blob(DEV_STORAGE_ACCOUNT_NAME,DEV_STORAGE_ACCOUNT_KEY,CONTAINER_NAME)

在Python项目中,可以利用urllib2发出一个PUT请求,如下所示 导入urllib2

def put_blob(storage_url,container_name, blob_name,qry_string,x_ms_blob_type):
 opener = urllib2.build_opener(urllib2.HTTPHandler)
 request = urllib2.Request(storage_url+container_name + '/' + blob_name+'?'+qry_string, data='Hello World!!')
 request.add_header('x-ms-blob-type', x_ms_blob_type)
 request.get_method = lambda: 'PUT'
 opener.open(request)

然后通过调用将blob上载到Azure存储:

put_blob(STORAGE_URL,CONTAINER_NAME,"sample.jpg",qry_string,"BlockBlob")

您还可以参考Prashanth创建的good guidance,如果您有任何进一步的顾虑,请随时通知我们。在

相关问题 更多 >