我正在尝试使用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)
我遇到的问题是我的状态=无。
如果我使用此代码,它将正常工作,但是我无法使用此方法查看上传状态。有一个.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()
不管我是否在进度条线程中使用它,第一种方法都不起作用,第二种方法每次都可以同时使用。我使用进度条查看下载状态和其他一些内容,并且效果很好,因此我很确信它的事实是我的状态=无(下载时就是问题)。
非常感谢您的帮助。
[问题是,您正在将请求的响应(在您的情况下为done
变量)与False
进行比较,此条件将永远不会返回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: