【问题标题】:NameError: name 'drive_service' is not defined Google APINameError:名称“drive_service”未定义 Google API
【发布时间】:2018-12-04 15:34:19
【问题描述】:

我想上传一张照片到谷歌云端硬盘。 我可以读取驱动器上的文件。 但是当我添加上传部分时,从第 49 行到第 55 行,我不断收到同样的错误。 我不断收到错误“NameError:未定义名称'drive_service'” 我已经导入了每个库,但仍然无法正常工作 这是我的代码 我环顾四周,但没有看到解释它的帖子。

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



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

def main():
    """Shows basic usage of the Drive v3 API.
    Prints the names and ids of the first 10 files the user has access to."""
    # The file token.json stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    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)
    drive = build('drive', 'v3', http=creds.authorize(Http()))

    # Call the Drive v3 API
    results = drive.files().list(
        pageSize=10, fields="nextPageToken, files(id, name)").execute()
    items = results.get('files', [])

    if not items:
        print('No files found.')
    else:
        print('Files:')
        for item in items:
            print(u'{0} ({1})'.format(item['name'], item['id']))

if __name__ == '__main__':
    main()

file_metadata = {'name': 'photo.jpg'}
media = MediaFileUpload('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'))

【问题讨论】:

  • 您是否希望在此时定义名称drive_service?为什么?
  • 嗯,我按照谷歌教程,但它似乎没有工作

标签: python google-api-client


【解决方案1】:

你可以直接使用service代替driver_service。它对我有用。

如代码示例所示

file_metadata = {'name': 'photo.jpg'}
media = MediaFileUpload('photo.jpg',
                        mimetype='image/jpeg')
file = service.files().create(body=file_metadata,
                                    media_body=media,
                                    fields='id').execute()

【讨论】:

    【解决方案2】:

    你已经与这条线建立了联系:

    drive = build('drive', 'v3', http=creds.authorize(Http()))

    拨打file = drive_service.files()时 你必须通过你刚刚建立的连接。所以不要使用drive_service,而是使用drive(你刚刚构建的)。

    总结一下,你应该替换:

    file = drive_service.files().create(body=file_metadata,
                                        media_body=media,
                                        fields='id').execute()
    

    与:

    file = drive.files().create(body=file_metadata,
                                media_body=media,
                                fields='id').execute()
    

    你的脚本应该可以工作了。

    【讨论】:

      【解决方案3】:

      drive_service 更改为drive 或反之亦然

      【讨论】:

        猜你喜欢
        • 2022-01-06
        • 1970-01-01
        • 2018-01-24
        • 1970-01-01
        • 2021-04-15
        • 2019-01-26
        • 2021-10-05
        • 2017-08-16
        相关资源
        最近更新 更多