使用Azure功能从Blob存储读取csv没有权限

时间:2019-10-28 11:22:16

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

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

  

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

代码段是:

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?

2 个答案:

答案 0 :(得分:1)

已解决 使用<v-icon v-if="item.hasOwnProperty('name')" ... >...</v-icon> 而不是get_blob_to_text

get_blob_to_path

找到了解决方案here

blobstring = block_blob_service.get_blob_to_text(<input_container_name>, file_name).content 不是必需的。因此,整个代码如下:

chmod

答案 1 :(得分:0)

目前,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
    )

enter image description here