Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将文件保存到Azure Blob中_Python 3.x_Azure_Python Requests_Azure Functions - Fatal编程技术网

Python 3.x 将文件保存到Azure Blob中

Python 3.x 将文件保存到Azure Blob中,python-3.x,azure,python-requests,azure-functions,Python 3.x,Azure,Python Requests,Azure Functions,我使用下面的python代码将文件保存到本地文件夹中。我想直接将此文件保存到Azure Blob中。我不希望文件存储在本地,然后上传到blob中 我尝试在folder变量中指定blob位置,但它不起作用。我有一个excel文件,我想从Web浏览器中读取该文件,并使用python将其保存到Azure Blob中 folder = 'Desktop/files/ab' r = requests.get(api_end_point, headers=api_headers, stream

我使用下面的python代码将文件保存到本地文件夹中。我想直接将此文件保存到Azure Blob中。我不希望文件存储在本地,然后上传到blob中

我尝试在folder变量中指定blob位置,但它不起作用。我有一个excel文件,我想从Web浏览器中读取该文件,并使用python将其保存到Azure Blob中

 folder = 'Desktop/files/ab'
    
 r = requests.get(api_end_point, headers=api_headers, stream=True)
 with open(folder, 'wb') as f:
    f.write(r.content)

首先,您应该以类似于流的方式获取文件

import os
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient

在我这边,我将数据放在请求主体中,然后将其上传到azure blob。这是一条小溪。您还可以在其中放置一条流

这些是官方文件:


如果我理解正确,您正在从api端点读取一个文件,然后希望将该文件的内容上载到blob存储中,而不首先将其保存在本地。是吗?是的,你是对的。你的API端点可以公开访问吗?我的意思是,如果我把你的API端点粘贴到浏览器中,我能在浏览器中看到文件的内容吗?不,不能。我正在访问内部端点,并且能够将文件下载到本地。不幸的是,如果不下载内容,就不可能实现。不过,您不需要将其保存为本地文件。您只需读取流并使用该流创建blob即可。谢谢。你能帮我定义一下你是如何将数据放入req对象的吗?@Andrew在我这边,我只是用postman来发布数据。您不必在upload\u blob()方法中放入req正文,任何流都可以。@Andrew在我这边,我使用
req.get\u body()
,但您不需要这样做。只需将其替换为要上载的流即可。在您这边,您可以将excel文件作为流读取,并将该流放入upload_blob()方法。@Andrew您能标记我的答案以结束这个问题吗?谢谢。:)
connect_str = os.getenv('str')
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
container_name = "test"
container_client = blob_service_client.get_container_client(container_name)
blob_client = blob_service_client.get_blob_client(container_name, "MyFirstBlob.txt")
blob_client.upload_blob(req.get_body(), blob_type="BlockBlob")