Python 3.x 将文件保存到Azure Blob中
我使用下面的python代码将文件保存到本地文件夹中。我想直接将此文件保存到Azure Blob中。我不希望文件存储在本地,然后上传到blob中 我尝试在folder变量中指定blob位置,但它不起作用。我有一个excel文件,我想从Web浏览器中读取该文件,并使用python将其保存到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
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")