我正在使用Google云端硬盘作为各种脚本存储公用文件的中心。但是,我注意到,尽管Google Drive假装像文件系统一样起作用,但它并没有遵守常规的文件系统约定,例如强制执行唯一的文件名。这允许不同的用户上传具有相同文件名的单独文件。
有什么办法可以防止这种情况?
我的所有脚本都使用相同的代码来访问Drive API来上传文件:
import os
import httplib2
from apiclient import discovery, errors
from apiclient.http import MediaFileUpload
credentials = get_google_drive_credentials()
service = discovery.build('drive', 'v2', http=credentials.authorize(httplib2.Http()))
dir_id = 'google_drive_folder_hash'
filename = '/some/path/blah.txt'
service.files().insert(
body={
'title': os.path.split(filename)[-1],
'parents': [{'id': dir_id}],
},
media_body=MediaFileUpload(filename, resumable=True),
).execute()
如果两个或两个以上的脚本运行了该脚本,并且在没有争用条件的情况下运行,为什么该代码会导致重复复制“ blah.txt”?我该如何预防?
答案 0 :(得分:1)
如果我的理解正确,那么这个答案如何?在此答案中,添加了在文件夹中搜索重复文件名的过程。为此,我使用了files.list方法。该脚本的流程如下。
title
的文件。res = service.files().list(q="title='" + title + "' and '" + dir_id + "' in parents", fields="items(id,title)").execute()
if len(res['items']) == 0:
# In this case, no duplicated filename is existing.
service.files().insert(
body={
'title': title,
'parents': [{'id': dir_id}],
},
media_body=MediaFileUpload(filename, resumable=True),
).execute()
else:
# In this case, the duplicated filename is existing.
# Please do error handling here, if you need.
print("Duplicated files were found.")
如果我误解了您的问题,而这不是您想要的结果,我深表歉意。