如何使用 Drive API v2 将本地 CSV 文件上传到Google云端硬盘,以便上传的文件位于原生Google电子表格格式。最好是在Python中,但原始HTTP请求就足够了。
我尝试了什么:
请求正文内容类型:'application / vnd.google-apps.spreadsheet',media_body content-type:'text / csv'。 - > 401错误请求
请求正文内容类型:'application / vnd.google-apps.spreadsheet',media_body content-type:'application / vnd.google-apps.spreadsheet'。 - > 400错误请求
...(其他一些例如留下财产和类似的,通常有400或驱动器没有将其识别为本机电子表格)
答案 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)