在 Python 中使用 next_chunk() 上传 Google 驱动器 API v3 上传的错误查看状态的解释?
Explaination on error viewing status of Google Drive API v3 upload using next_chunk() in Python?
我正在尝试使用 v3 api 向 google 驱动器进行可恢复的上传。我希望能够显示上传的状态栏。如果我不需要状态栏,我可以轻松快速地上传它,因为我可以使用 .execute() 函数并上传。当我想分块上传文件时,问题就出现了。我在这里和其他地方看到了一些解决方案,但它们似乎不起作用。
这是我的上传代码:
CHUNK_SIZE = 256*1024
file_metadata = {'name': file_name, 'parents': [folder_id]} #Metadata for the file we are going to upload
media = MediaFileUpload(file_path, mimetype='application/zip',chunksize=CHUNK_SIZE, resumable=True)
file = service.files().create(body=file_metadata, media_body=media, fields='id')
progress = progressBarUpload(file) #create instance off progress bar class
progress.exec_() #execute it
progress.hide() #hide it off the screen after
print(file_name + " uploaded successfully")
return 1 #returns 1 if it was successful
进度条为我的 gui 调用一个线程,然后使用 next_chunk() 函数,代码在这里:
signal = pyqtSignal(int)
def __init__(self, file):
super(ThreadUpload,self).__init__()
self.file = file
def run(self):
done = False
while done == False:
status, done = self.file.next_chunk()
print("status->",status)
if status:
value = int(status.progress() * 100)
print("Uploaded",value,"%")
self.signal.emit(value)
我遇到的问题是我的状态 = None.
如果我使用此代码,它可以正常工作,但我无法使用此方法查看上传状态。添加了一个 .execute() 使其工作。这样做时我摆脱了 next_chunk() 部分:
CHUNK_SIZE = 256*1024
file_metadata = {'name': file_name, 'parents': [folder_id]} #Metadata for the file we are going to upload
media = MediaFileUpload(file_path, mimetype='application/zip',chunksize=CHUNK_SIZE, resumable=True)
file = service.files().create(body=file_metadata, media_body=media, fields='id').execute()
无论我是否在进度条线程中使用,第一种方法都不起作用,第二种方法每次都有效。我使用进度条来查看下载状态和其他一些东西,它工作得很好,所以我非常有信心这是我的状态 = None 下载时的问题。
提前感谢您的帮助。
问题是您将请求的响应(在您的情况下为 done
变量)与 False
进行比较,这种情况永远不会 return True
因为上传过程完成后,响应是 None
或具有对象 ID 的对象。这是我测试并成功运行的代码:
CHUNK_SIZE = 256 * 1024
file_metadata = {'name': "Test resumable"} # Metadata for the file we are going to upload
media = MediaFileUpload("test-image.jpg", mimetype='image/jpeg', chunksize=CHUNK_SIZE, resumable=True)
request = service.files().create(body=file_metadata, media_body=media, fields='id')
response = None
while response is None:
status, response = request.next_chunk()
if status:
print(status.progress())
print(response)
print("uploaded successfully")
对于您的情况,您可以更改这两行:
done = False
while done == False:
为此:
done = None
while done is None:
我正在尝试使用 v3 api 向 google 驱动器进行可恢复的上传。我希望能够显示上传的状态栏。如果我不需要状态栏,我可以轻松快速地上传它,因为我可以使用 .execute() 函数并上传。当我想分块上传文件时,问题就出现了。我在这里和其他地方看到了一些解决方案,但它们似乎不起作用。
这是我的上传代码:
CHUNK_SIZE = 256*1024
file_metadata = {'name': file_name, 'parents': [folder_id]} #Metadata for the file we are going to upload
media = MediaFileUpload(file_path, mimetype='application/zip',chunksize=CHUNK_SIZE, resumable=True)
file = service.files().create(body=file_metadata, media_body=media, fields='id')
progress = progressBarUpload(file) #create instance off progress bar class
progress.exec_() #execute it
progress.hide() #hide it off the screen after
print(file_name + " uploaded successfully")
return 1 #returns 1 if it was successful
进度条为我的 gui 调用一个线程,然后使用 next_chunk() 函数,代码在这里:
signal = pyqtSignal(int)
def __init__(self, file):
super(ThreadUpload,self).__init__()
self.file = file
def run(self):
done = False
while done == False:
status, done = self.file.next_chunk()
print("status->",status)
if status:
value = int(status.progress() * 100)
print("Uploaded",value,"%")
self.signal.emit(value)
我遇到的问题是我的状态 = None.
如果我使用此代码,它可以正常工作,但我无法使用此方法查看上传状态。添加了一个 .execute() 使其工作。这样做时我摆脱了 next_chunk() 部分:
CHUNK_SIZE = 256*1024
file_metadata = {'name': file_name, 'parents': [folder_id]} #Metadata for the file we are going to upload
media = MediaFileUpload(file_path, mimetype='application/zip',chunksize=CHUNK_SIZE, resumable=True)
file = service.files().create(body=file_metadata, media_body=media, fields='id').execute()
无论我是否在进度条线程中使用,第一种方法都不起作用,第二种方法每次都有效。我使用进度条来查看下载状态和其他一些东西,它工作得很好,所以我非常有信心这是我的状态 = None 下载时的问题。
提前感谢您的帮助。
问题是您将请求的响应(在您的情况下为 done
变量)与 False
进行比较,这种情况永远不会 return True
因为上传过程完成后,响应是 None
或具有对象 ID 的对象。这是我测试并成功运行的代码:
CHUNK_SIZE = 256 * 1024
file_metadata = {'name': "Test resumable"} # Metadata for the file we are going to upload
media = MediaFileUpload("test-image.jpg", mimetype='image/jpeg', chunksize=CHUNK_SIZE, resumable=True)
request = service.files().create(body=file_metadata, media_body=media, fields='id')
response = None
while response is None:
status, response = request.next_chunk()
if status:
print(status.progress())
print(response)
print("uploaded successfully")
对于您的情况,您可以更改这两行:
done = False
while done == False:
为此:
done = None
while done is None: