使用云端硬盘v2 API将CSV上传到Google云端硬盘电子表格

时间:2012-10-07 03:09:27

标签: csv google-drive-api google-sheets

如何使用 Drive API v2 将本地 CSV 文件上传到Google云端硬盘,以便上传的文件位于原生Google电子表格格式。最好是在Python中,但原始HTTP请求就足够了。

我尝试了什么:

  1. 请求正文内容类型:'application / vnd.google-apps.spreadsheet',media_body content-type:'text / csv'。 - > 401错误请求

  2. 请求正文内容类型:'application / vnd.google-apps.spreadsheet',media_body content-type:'application / vnd.google-apps.spreadsheet'。 - > 400错误请求

  3. ...(其他一些例如留下财产和类似的,通常有400或驱动器没有将其识别为本机电子表格)

5 个答案:

答案 0 :(得分:24)

您的插入请求应指定text/csv作为内容类型。 获取文件的技巧是将?convert=true查询参数添加到请求URL:

https://developers.google.com/drive/v2/reference/files/insert

答案 1 :(得分:10)

(2017年3月)请注意,虽然问题专门询问了Drive API v2,但开发人员应该知道2015年底的Google Drive API团队released v3以及该版本insert()将名称更改为create(),以便更好地反映文件操作。还没有更多转换标志 - 你只需指定MIME类型......想象一下!

文档也得到了改进:现在有一个special guide devoted to uploads(简单,多部分,可恢复),包含Java,Python,PHP,C#/ .NET,Ruby,JavaScript中的示例代码/Node.js和iOS / Obj-C上传文件,另一个用于将CSV文件导入Google表格。

只是为了直截了当,下面是一个备用Python解决方案(对于文档中的示例),用于短文件("简单上传"),您不需要{{ 1}}类。此代码段假定您的身份验证代码适用于服务端点为apiclient.http.MediaFileUpload且最小身份验证范围为DRIVE的位置。

https://www.googleapis.com/auth/drive.file

答案 2 :(得分:7)

Claudio Cherubino的回答是正确的 - 您必须手动添加参数。既然你在Python中问过,这是一个具体的例子:

body = {
    'mimeType':'text/csv',
    'title': 'title'
}

# service: your authenticated service
# media: your apiclient.http.MediaFileUpload object, with 'text/csv' mimeType
req = service.files().insert(media_body=media, body=body)

# patch the uri to ensure conversion, as the documented kwarg seems to be borked.
# you may need to use '?convert=true' depending on the uri, not taking that into
# account here for sake of simplicity.
req.uri = req.uri + '&convert=true'

# now we can execute the response.
resp = req.execute()

# should be OK
assert resp['mimeType'] == u'application/vnd.google-apps.spreadsheet'

答案 3 :(得分:7)

Java:

    //Insert a file  
    File body = new File();
    body.setTitle("CSV");
    body.setDescription("A test document");
    body.setMimeType("text/csv");

    java.io.File fileContent = new java.io.File("document.csv");
    FileContent mediaContent = new FileContent("text/csv", fileContent);

    Insert insert = service.files().insert(body, mediaContent);
    insert.setConvert(true);
    File file = insert.execute();
    System.out.println("File ID: " + file.getId());

答案 4 :(得分:0)