制作 Google Drive 文件的深层副本

问题描述

是否可以对 Google Drive 文件执行“深层”复制,以便复制的文件不会指向与原始文件相同的文件对象?我希望能够复制文件并使副本完全独立于原始文件,这样对副本所做的任何修改也不会出现在原始文件中。使用以下代码我可以:

  1. 在 Google 云端硬盘中创建文件
  2. 文件复制到新文件夹中

但问题是对副本所做的任何更改也会显示在原件中。我希望复制的文件一个完全独立的文件。这可能吗?

x_save = 60.0
save_quantity = 63.0

编辑:

我能够通过复制共享文件来执行深层复制。当从共享文件在云端硬盘中没有链接到原始文件的快捷方式)复制文件时,会创建一个深层副本,这样对复制文件修改就不会显示出来在原来的。以这种方式复制共享文件夹会引发错误,但单个文件工作正常。

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

gauth = GoogleAuth()
#load prevIoUsly generated credentials file
gauth.LoadCredentialsFile("mycreds3.txt")
drive = GoogleDrive(gauth)

#define ID of file to be copied
template_file_id = "1RQWYeeth-Ph ..."

#create a new folder to store the copied file
folder = drive.CreateFile({"title":"test_folder",'mimeType': 'application/vnd.google-apps.folder'}) 

folder.Upload()
folder_id = folder['id']

#copy file into newly created folder
drive.auth.service.files().copy(fileId=template_file_id,body={'parents':[{"kind":'drive#file',"id":folder_id}],'title':'new_file_title'}).execute()

解决方法

让我们一步一步来

这个库的工作方式是所有调用都必须通过一个服务。在这种情况下,驱动器服务将使您的应用程序访问 Google 驱动器 API 中的所有可用方法。

drive_service = GoogleDrive(gauth)

您在创建 drive_service 时已命名了可变驱动器以保持稳定性。

创建一个新文件并将它uploading 放到谷歌驱动器是一个由两部分组成的过程。第一部分是 file_metadata ,即文件的名称和描述。第二个是媒体或实际文件数据本身。

file_metadata = {'name': 'photo.jpg'}
media = MediaFileUpload('files/photo.jpg',mimetype='image/jpeg')
file = drive_service.files().create(body=file_metadata,media_body=media,fields='id').execute()
print 'File ID: %s' % file.get('id')

注意:所有字段的作用是将 api 返回的响应限制为仅文件 id。