создайте папку на гугл-диске и загрузите в нее файлы

1

Как я могу создать папку на диске Google и загружать файлы в эту папку? (в питоне)

Я пытался с учебниками Google, но это дает мне ошибки

создание папки, не работает, выдавая такие ошибки, как "диск_сервис не определен"

file_metadata = {
    'title': 'Files',
    'mimeType': 'application/vnd.google-apps.folder'
}
file = drive_service.files().insert(body=file_metadata,
                                    fields='id').execute()
print 'Folder ID: %s' % file.get('id')

Использовал этот код для загрузки файла, и он работает, как я могу изменить его для загрузки файла в папку, если она существует, если не создать и загрузить.

import json
import requests
headers = {"Authorization": "Bearer Token"}

para = {
    "name": "index.jpeg",

}
files = {
    'data': ('metadata', json.dumps(para), 'application/json; charset=UTF-8'),
    'file': open("./index.jpeg", "rb")
}
r = requests.post(
    "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart",
    headers=headers,
    files=files
)
print(r.text)
  • 0
    Пожалуйста, поделитесь примером того, что вы уже пробовали.
  • 0
    Выложил пример кода, который я пробовал для создания папки. Это дает мне Drive_service не определена ошибка
Показать ещё 9 комментариев
Теги:
google-drive-sdk

1 ответ

0

Вот пример того, что, я думаю, вы ищете (это отдельный пример, но я думаю, что вы можете изменить его в свой существующий код):

from __future__ import print_function
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
from httplib2 import Http
from oauth2client import file, client, tools

# If modifying these scopes, delete the file token.json.
SCOPES = 'https://www.googleapis.com/auth/drive.file'

def main():

    # Access the Drive service
    store = file.Storage('token.json')
    creds = store.get()
    if not creds or creds.invalid:
        flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
        creds = tools.run_flow(flow, store)
    service = build('drive', 'v3', http=creds.authorize(Http()))


    # Check if folder exists (simply matching by name)
    folder_name = "Photos"

    folder_id = None
    query = "mimeType='application/vnd.google-apps.folder' and trashed=false and name='" + folder_name + "'"
    results = service.files().list(
        pageSize=1, q=query, fields="files(id, name)").execute()
    folders = results.get('files', [])

    if folders:
        folder_id = folders[0]['id']

    # If folder not found, then create it.
    else:
        file_metadata = {
            'name': folder_name,
            'mimeType': 'application/vnd.google-apps.folder'
        }
        folder_file = service.files().create(body=file_metadata,
                                            fields='id').execute()

        folder_id = folder_file.get('id')


    # Add file to folder.
    file_metadata = {
        'name': 'photo.png',
        'parents': [folder_id]
    }
    media = MediaFileUpload('photo.png',
                            mimetype='image/png',
                            resumable=True)

    image_file = service.files().create(body=file_metadata,
                                              media_body=media,
                                              fields='id').execute()

if __name__ == '__main__':
    main()
  • 0
    Приятно. Примечание: в вашем коде 2 ошибки. q= должен включать trashed=false и вам нужно перебирать files().list до nextPageToken пор, пока nextPageToken станет нулевым. В качестве оптимизации вы должны включить 'name = folder_name` в q, чтобы вы выбирали только соответствующие папки. Ваш код будет извлекать все папки (вплоть до первых 100)
  • 0
    @pinoyyid Большое спасибо, я немного поторопился, чтобы получить ответ, но теперь внесу изменения в соответствии с вашими предложениями!
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню