如何在Azure Blob中上传大字符串?

问题描述

现在,我试图弄清楚如何使用Azure,现在在将数据存储到存储帐户中时遇到了问题。 我有三个字符串,想要将每个字符串存储在单独的Blob中。使用前两个代码,我的代码可以正常工作,但是第三个代码会导致重试,并以超时结束。 我的代码在Azure函数中运行。

这是一个最小的示例:

from azure.storage.blob import BlobClient

blob_client = BlobClient.from_connection_string(
    conn_str.      = '<STORAGE_ACCOUNT_CONNECTION_STRING>',container_name = '<CONTAINER_NAME>',blob_name.     = '<NAME_OF_BLOB>',)

dic_blob_props = blob_client.upload_blob(
    data      = '<informatION_THAT_SHOULD_GO_TO_THE_BLOB>',blob_type = "BlockBlob",overwrite = True,)

对于前两个字符串,一切正常,但第三个失败。字符串的长度如下:

len(s_1) = 1246209
len(s_2) = 8794086
len(s_3) = 24518001

最有可能是因为第三个字符串太长,但是必须有一种保存它的方法,对吗? 我已经尝试通过.upload_blobtimeout=600方法中设置超时时间,但这根本没有改变结果,也没有改变直到尝试进行新写入的时间。

错误是:

Exception: ServiceResponseError: ('Connection aborted.',timeout('The write operation timed out'))

如果您对问题有任何想法,请告诉我:-)

解决方法

在我这边,我没有问题。您可以看一下我的代码:

__init__.py

import logging

import azure.functions as func


def main(req: func.HttpRequest,outputblob: func.Out[func.InputStream],) -> func.HttpResponse:
    logging.info('This code is to upload a string to a blob.')
    s_3 = "x"*24518001
    outputblob.set(s_3)
    return func.HttpResponse(
            "The string already been uploaded to a blob.",status_code=200
    )

function.json

{
  "scriptFile": "__init__.py","bindings": [
    {
      "authLevel": "anonymous","type": "httpTrigger","direction": "in","name": "req","route": "{test}","methods": [
        "get","post"
      ]
    },{
      "type": "http","direction": "out","name": "$return"
    },{
      "name": "outputblob","type": "blob","path": "test1/{test}.txt","connection": "str","direction": "out"
    }
  ]
}

local.settings.json

{
  "IsEncrypted": false,"Values": {
    "AzureWebJobsStorage": "","FUNCTIONS_WORKER_RUNTIME": "python","str":"DefaultEndpointsProtocol=https;AccountName=0730bowmanwindow;AccountKey=xxxxxx==;EndpointSuffix=core.windows.net"
  }
}

然后我点击端点http://localhost:7071/api/bowman,它将字符串上传到blob,并且没有超时错误:

enter image description here

所以,我认为问题与您使用的方法有关。

,

就我而言,在将功能部署到云中后,问题消失了。似乎使用Visual Studio代码进行调试时出现问题。