【问题标题】:read csv from blob storage with Azure function no permissions使用 Azure 函数从 blob 存储读取 csv 无权限
【发布时间】:2020-02-23 16:00:12
【问题描述】:

我想使用 python Azure 函数从 Azure blob 存储中读取 csv 文件。使用下面的代码,我得到了错误:

[Errno 30] 只读文件系统:'/home/site/wwwroot/my_csv_file'

而代码sn-p是:

work_directory= os.getcwd()
filename = my_csv_file
account_name = <blob_storage>
account_key = <blob_key>

os.chmod(work_directory, 0o777)

input_fpath=os.path.join(work_directory, filename)
block_blob_service = BlockBlobService(account_name, account_key)
block_blob_service.get_blob_to_path(container_name=<input_container_name>, blob_name=filename,
                                          file_path=input_fpath)

如何更改权限或如何以其他方式将 csv 读取到 python?

【问题讨论】:

  • 错误显示错误文件在您的功能盘中,而不是blob文件中。
  • 在python函数中它是默认只读的,这就是它显示只读的原因。
  • 关于这个问题的任何更新,您现在可以阅读文件吗?
  • @GeorgeChen 我已经用 block_blob_service.get_blob_to_path(...).content 解决了这个问题
  • 如果你解决了,你可以发布你的答案并标记它以关闭这个问题。

标签: azure azure-functions azure-blob-storage


【解决方案1】:

已解决 使用get_blob_to_text 而不是get_blob_to_path

blobstring = block_blob_service.get_blob_to_text(<input_container_name>, file_name).content

找到了解决方案here

chmod 不是必需的。所以,整个代码如下:

filename = my_csv_file
account_name = <blob_storage>
account_key = <blob_key>

block_blob_service = BlockBlobService(account_name, account_key)
blobstring = block_blob_service.get_blob_to_text(<input_container_name>, filename).content

【讨论】:

    【解决方案2】:

    目前 Python Azure 函数不允许写入文件,它是只读模式,无法更改。因此,您既不能使用chmod 方法也不能使用get_blob_to_path,因为您可以将文件写入磁盘。

    因此,也许您可​​以将文件读取到流中,然后将其发送到响应中。您可以参考我的代码,我使用Blob binding 读取文本文件。

    def main(req: func.HttpRequest,inputblob: func.InputStream) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    
    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')
    
    if name:
        return func.HttpResponse(inputblob.read(size=-1))
    else:
        return func.HttpResponse(
             "Please pass a name on the query string or in the request body",
             status_code=400
        )
    

    【讨论】:

      猜你喜欢
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2020-10-21
      • 2020-12-22
      • 2019-04-15
      • 2019-08-06
      • 2012-06-16
      相关资源
      最近更新 更多