因此,我正在尝试将文件上传到用户指定的特定Google云端硬盘文件夹。以下是我尝试过的代码。我得到了folderID,我尝试将文件发布到该文件夹但是我收到404 Not Found
错误。
def post_file(self, files_to_send, config = {}):
if config:
if type(config) is str:
config = literal_eval(config)
path_id = config.get('path')
for file_to_send in files_to_send:
filename = file_to_send.name.split('/')[-1]
status = self.call.post('https://www.googleapis.com/upload/drive/v2/files?uploadType=media/' + str(path_id) + "/children")
使用Drive API文档中的界面,我能够获取具有相同folderID的数据,但我无法发布(即使使用界面)。 Files_to_send
是一个列表,其中包含我需要上传到特定文件夹的所有文件,config
包含文件夹路径。
我需要帮助了解我做错了什么。我已经阅读了文档并查看了其他答案,但我还没有找到解决方案。如果我没有指定文件夹ID,则会将虚拟文件发布到我的驱动器,但它不会上传我想要的文件,并且在指定folderID时它根本不会上传任何内容。
基本上,我需要帮助插入来自Google云端硬盘中特定文件夹的文件。
谢谢!
答案 0 :(得分:3)
我相信您应该发送包含parents
字段的元数据JSON。
类似的东西:
{
"parents" : [path_id]
}
您可以在此处试用此API:https://developers.google.com/drive/v2/reference/files/insert
答案 1 :(得分:1)
解决此问题需要两个步骤:
获取文件夹ID:
folder_list = self.drive.ListFile({'q': "trashed=false"}).GetList()
for folder in folder_list:
print 'folder title: %s, id: %s' % (folder['title'], folder['id'])
找到所需文件夹的ID后,使用此功能:
def upload_file_to_specific_folder(self, folder_id, file_name):
file_metadata = {'title': file_name, "parents": [{"id": folder_id, "kind": "drive#childList"}]}
folder = self.drive.CreateFile(file_metadata)
folder.SetContentFile(file_name) #The contents of the file
folder.Upload()
答案 2 :(得分:0)
我将文件放在特定文件夹中的方法是在元数据中传递以下信息。
此处<someFolderID>
信息可以检索为:
1.去谷歌驱动器
2.选择文件夹
3.观察地址栏,它在https://drive.google.com/drive/folders/
{
"parents":[
"id": "<someFolderID>",
"kind": "drive#file"
]
}
答案 3 :(得分:0)
在第3版中,只需更新file_metadata即可:
file_metadata = {'name': 'exmample_file.pdf', "parents": ["ID_OF_THE_FOLDER"]}
答案 4 :(得分:0)
用于混凝土样品
...
from googleapiclient import discovery
from apiclient.http import MediaFileUpload
...
drive_service = discovery.build('drive', 'v3', credentials=creds)
...
def uploadFile(filename, filepath, mimetype, folderid):
file_metadata = {'name': filename,
"parents": [folderid]
}
media = MediaFileUpload(filepath,
mimetype=mimetype)
file = drive_service.files().create(body=file_metadata,
media_body=media,
fields='id').execute()
print('File ID: %s' % file.get('id'))
#sample to use it:
filename = 'cible.png'
filepath = 'path/to/your/cible.png'
mimetype = 'image/png'
folderid = 'your folder id' #ex:'1tQ63546ñlkmulSaZtz5yeU5YTSFMRRnJz'
uploadFile(filename, filepath, mimetype, folderid)