Python请求Google Drive

3 投票
1 回答
3601 浏览
提问于 2025-04-18 06:12

我正在尝试使用Python的requests库将一个文件发送到Google Drive的API。根据谷歌的文档,我只需要发送一个多部分请求。具体的文档可以在这里找到:https://developers.google.com/drive/web/manage-uploads#multipart。我需要先发送一些元数据,然后再发送文件。以下是我目前尝试的代码:

    def upload_csv(self, file, description):
      self.refresh()
      url = self.url+'?uploadType=multipart&' + urllib.urlencode({'key':self.api_key})

      headers = { 'Authorization':'Bearer {}'.format(self.access_token),
    #                    'content-type':'multipart/related',
    #                    'content-length':size
                }

      data =  {'title':file,'description':description }
      files = {'file':(file,open(file,'rb'),'text/csv')}
      response = requests.post( url, headers = headers, data = data, files = files )

但是我收到了一个错误:u'错误的内容类型。请使用multipart。有没有办法用requests同时发送元数据和文件呢?

1 个回答

4

我找到了一个解决办法。问题是谷歌希望元数据和文件放在一起。

    def upload_csv(self, file, description):
      self.refresh()
      url = self.url+'?uploadType=multipart&convert=true' +   urllib.urlencode({'key':self.api_key})

      headers = { 'Authorization':'Bearer {}'.format(self.access_token) }

      class DataDict(dict):
          def read(self):
              return str( self )

      data = ('metadata',DataDict(title = file,description = description),'application/json; charset=UTF-8')
      file = (file,open(file,'rb'),'text/csv')
      files = {'data':data, 'file':file }
      response = requests.post( url, headers = headers, files = files )
      return respone

撰写回答