【发布时间】:2021-12-12 20:00:34
【问题描述】:
背景
我有一个程序,客户端可以在其中查看服务器上的文件列表,然后选择要从服务器上传到 Google Cloud Storage 的文件。当文件从服务器上传到谷歌云存储时,我想让客户端知道文件上传的进度。 到目前为止,我可以使用 tqdm 的 wrapattr 方法在服务器的终端屏幕上显示上传的进度,如下所示:
object_address = str(uuid.uuid4())
upload_url, upload_method = get_upload_url(object_address) # fetches signed upload URL
size = os.path.getsize(filename)
with open(filename, "rb") as in_file:
total_bytes = os.fstat(in_file.fileno()).st_size
with tqdm.wrapattr(
in_file,
"read",
total=total_bytes,
miniters=1,
desc="Uploading to my bucket",
) as file_obj:
response = requests.request(
method=upload_method,
url=upload_url,
data=file_obj,
headers={"Content-Type": "application/octet-stream"},
)
response.raise_for_status()
return object_address, size
问题
我需要将上传进度发送给客户端。如果您只能在服务器的终端屏幕上看到上传进度,那将无济于事。
问题
如何检索上传进度以便将其发送给客户端?
不幸的是,我认为 wrapattr 函数没有任何回调函数的参数,我可以在每次将块上传到 Google Cloud Storage 时调用这些参数。我愿意接受其他无需使用 tqdm wrapattr 方法即可检索进度的方法。
我知道 Google Cloud Storage 具有可恢复的上传功能,可让您跟踪进度,但它们使用 cURL,因此我必须使用子进程,而且我宁愿使用比这更干净的东西。
谢谢!
【问题讨论】:
-
我可以看到您只共享应用程序中的代码,但是客户端如何与应用程序本身进行交互?您能否添加更多有关用户如何获取您尝试显示的信息的信息?我想你也打算使用终端,但我认为你应该分享更多关于这方面的信息。
-
@Ginger - 感谢您的反馈。我更新了背景以提供更多细节。客户端将看到服务器上的文件列表。然后客户端会选择服务器上的一个文件从服务器上传到谷歌云存储,服务器会这样做。同样,问题是在文件上传时将上传进度返回给客户端。谢谢!
标签: python file-upload google-cloud-storage tqdm