来自this example。我可以使用MediafileUpload创建文件夹吗?我怎样才能从中获取parent_id?
来自https://developers.google.com/drive/folder
我只知道我应该使用mime =“application / vnd.google-apps.folder”但是如何实现本教程以用Python编程?
感谢您的建议。
答案 0 :(得分:17)
要在云端硬盘上创建文件夹,请尝试:
def createRemoteFolder(self, folderName, parentID = None):
# Create a folder on Drive, returns the newely created folders ID
body = {
'title': folderName,
'mimeType': "application/vnd.google-apps.folder"
}
if parentID:
body['parents'] = [{'id': parentID}]
root_folder = drive_service.files().insert(body = body).execute()
return root_folder['id']
如果要在另一个文件夹中创建文件夹,则此处只需要父ID,否则只是不传递任何值。
如果你想要父ID,你需要编写一个方法来搜索Drive以查找该位置中具有该父名称的文件夹(执行list()调用),然后获取该文件夹的ID。
编辑:请注意,API的v3使用“父级”字段的列表,而不是字典。此外,'title'
字段更改为'name'
,insert()
方法更改为create()
。对于v3,上面的代码将更改为以下代码:
def createRemoteFolder(self, folderName, parentID = None):
# Create a folder on Drive, returns the newely created folders ID
body = {
'name': folderName,
'mimeType': "application/vnd.google-apps.folder"
}
if parentID:
body['parents'] = [parentID]
root_folder = drive_service.files().create(body = body).execute()
return root_folder['id']
答案 1 :(得分:1)
仅当您要插入内容时才需要媒体文件上传。由于您只想插入元数据(文件夹只是元数据),因此您不需要它。使用JSON代表foder的常规POST就足够了。
您可以通过多种方式获取父ID:
https://drive.google.com/#folders/0B8VrsrGIcVbrRDVxMXFWVkdfejQ
0B8VrsrGIcVbrRDVxMXFWVkdfejQ
如何以编程方式获取FileID:
root
。使用3.和1.,您可以获取云端硬盘的所有fileIds。
我不知道如何更清楚
答案 2 :(得分:0)
def create_folder(header, folder_name, folder_id, drive_id=None):
url = 'https://www.googleapis.com/upload/drive/v3/files'
file_metadata = {
'name': folder_name,
'mimeType': 'application/vnd.google-apps.folder',
'parents': [folder_id]
}
file_withmetadata = {"data": ("metadata", json.dumps(file_metadata), "application/json; charset=UTF-8")}
param = {"q":"'%s' in parents" %folder_id, "supportsAllDrives":"true"}
if drive_id is not None:
param['driveId'] = drive_id
r = requests.post(
url,
headers=header,
params=param,
files=file_withmetadata
)
return json.loads(r.text)