【发布时间】:2020-11-09 18:06:00
【问题描述】:
我将视频保存在 azure blob 存储中,我想将它们上传到 Facebook。 Facebook 视频上传是一个多部分/表单数据发布请求。执行此操作的普通方法是使用 azure python sdk 中的 readall() 方法将 azure blob 下载为字节,并将其设置在 requests post data 中,如下所示。
# download video from azure blob
video = BlobClient.from_connection_string(AZURE_STORAGE_CONNECTION_STRING,
AZURE_CONTAINER_NAME,
f"{folder_id}/{file_name}")
video = video.download_blob().readall()
# upload video to facebook
url = f"{API_VIDEO_URL}/{page_id}/videos"
params = {
"upload_phase": "transfer",
"upload_session_id": session_id,
"start_offset": start_offset,
"access_token": access_token
}
response = requests.post(url, params=params, files={"video_file_chunk": video})
文件的字节数被加载到内存中,这对较大的文件不利。 azure sdk readinto(stream) 中有一种方法可以将文件下载到流中。有没有办法连接请求streaming upload 和readinto() 方法。还是有其他方法可以直接从 Blob 存储上传文件?
【问题讨论】:
-
你介意把文件保存在本地然后上传文件吗?
-
@JimXu No. 既不是本地文件也不是内存。我需要直接从 azure blob 传递到 facebook
-
好的。我知道了。据我所知,我们可以在参数中使用
file_url和blob sas url。但它有一个限制,视频应该在 5 分钟内下载,并且它的大小不能超过 1GB。所以你的视频不能很大,网络应该很好:developers.facebook.com/docs/graph-api/reference/page/videos/… -
如果对你没有用,我认为我们需要将内容写入本地或内存流
-
@JimXu 因为我使用带有块的可恢复视频上传
file_url对我不起作用。所以我认为更好的方法是在内存中延迟加载。一次下载和上传一个块。
标签: python-3.x file-upload python-requests azure-blob-storage