需要有关通过api将文件插入google驱动器的帮助。为此目的的api留档没有明确解释如何通过超文本传输协议post请求发送文件的实际正文。
4年后,这仍然很难弄清楚。我接受了@user1158023的回答来支持上传图像。我正在使用API v3和superagent.js来帮助我(因为gapi.client.request正在将请求发送到content.googleapis.com!?)。希望有人会觉得这很有用。
function gd_uploadFile(name, contentType, data, callback) {
const boundary = '-------314159265358979323846';
const delimiter = "\r\n--" + boundary + "\r\n";
const close_delim = "\r\n--" + boundary + "--";
contentType = contentType || "text/html";
var metadata = {
name: name,
'mimeType': contentType
};
var multipartRequestBody =
delimiter + 'Content-Type: application/json\r\n\r\n' +
JSON.stringify(metadata) +
delimiter +
'Content-Type: ' + contentType + '\r\n';
//Transfer images as base64 string.
if (contentType.indexOf('image/') === 0) {
var pos = data.indexOf('base64,');
multipartRequestBody += 'Content-Transfer-Encoding: base64\r\n' + '\r\n' +
data.slice(pos < 0 ? 0 : (pos + 'base64,'.length));
} else {
multipartRequestBody += + '\r\n' + data;
}
multipartRequestBody += close_delim;
if (!callback) { callback = function(file) { console.log("Update Complete ", file) }; }
superagent.post('https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart').
set('Content-Type', 'multipart/form-data; boundary="' + boundary + '"').
set('Authorization', 'Bearer ' + gapi.auth.getToken().access_token).
send(multipartRequestBody).
end(function () {
console.log(arguments);
});
}
//On upload
$('#file')[0].onchange = function () {
var file = $('#file')[0].files[0];
if (file && file.type === 'image/jpeg') {
var reader = new FileReader();
reader.onloadend = function () {
var data = reader.result;
gd_uploadFile('img.jpg', 'image/jpeg', data, function () {
console.log(arguments);
});
}
reader.readAsDataURL(file);
}
};
index.html
...
<form>
<span>Upload: </span><input id="file" type="file" name="myFile">
</form>
...
谢谢你的解释!这花了我几个小时在蹩脚的谷歌SDK留档上兜圈子(抱歉我不得不发牢骚)。
下面是我创建的一个函数,它将更新一个文本文件(正如您可以看到的,我正在更新html):
function gd_updateFile(fileId, folderId, text, callback) {
const boundary = '-------314159265358979323846';
const delimiter = "\r\n--" + boundary + "\r\n";
const close_delim = "\r\n--" + boundary + "--";
var contentType = "text/html";
var metadata = {'mimeType': contentType,};
var multipartRequestBody =
delimiter + 'Content-Type: application/json\r\n\r\n' +
JSON.stringify(metadata) +
delimiter + 'Content-Type: ' + contentType + '\r\n' + '\r\n' +
text +
close_delim;
if (!callback) { callback = function(file) { console.log("Update Complete ",file) }; }
gapi.client.request({
'path': '/upload/drive/v2/files/'+folderId+"?fileId="+fileId+"&uploadType=multipart",
'method': 'PUT',
'params': {'fileId': fileId, 'uploadType': 'multipart'},
'headers': {'Content-Type': 'multipart/mixed; boundary="' + boundary + '"'},
'body': multipartRequestBody,
callback:callback,
});
}
这是google示例(使用上传的二进制文件)的混搭,以及上面@Nivco的精彩解释。
有关插入操作的文档已经包含一系列编程语言的示例,下面介绍如何使用Google云端硬盘API的基于HTTP的协议进行操作。
首先,将新文件元数据发布到驱动器endpoint。它必须采用文件资源JSON对象的形式:
POST /drive/v2/files HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer <OAuth 2.0 access token here>
...
{
"title": "file_name.extension",
"mimeType": "mime/type",
"description": "Stuff about the file"
}
响应主体将是新创建的文件资源的JSON表示。它看起来会像:
{
"kind": "drive#file",
"id": string,
"etag": etag,
"selfLink": string,
"title": "file_name",
"mimeType": "mime/type",
"description": "Stuff about the file"
...
"downloadUrl": string,
...
}
这是对文件条目已创建的确认。现在您需要上传内容。为此,您需要获取上面响应中id JSON属性给出的文件ID,并使用OAuth 2.0授权请求将实际文件的内容放入上传endpoint。它应该如下所示:
PUT /upload/drive/v2/files/{id}?uploadType=media HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer <OAuth 2.0 access token here>
Content-Type: mime/type
<file content here>
您完成了:)
也有一种方法可以在一个使用多部分请求的单次POST请求中实现这一点,您可以在发布内容的同时发布文件的元数据。下面是一个例子:
POST /upload/drive/v2/files HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer <OAuth 2.0 access token here>
Content-Type: multipart/form-data; boundary=287032381131322
...
--287032381131322
Content-Type: application/json
{
"title": "file_name.extension",
"mimeType": "mime/type",
"description": "Stuff about the file"
}
--287032381131322
Content-Type: mime/type
<file content here>
--287032381131322--
响应将包含新创建的文件的元数据。您还可以在请求的子部分中使用内容传输编码:base64 标头,以便能够将文件的数据作为 Base 64 编码传递。
最后,还有一个可恢复的上传协议,它方便上传大文件,提供暂停/恢复功能和/或上传带有不稳定互联网连接的文件。
PS:大部分内容现在在Drive的文件上传留档中进行了描述。
我正在尝试使用最新的REST API发布JIRA的附件。这是我的代码: 然而,我得到了以下回应: 我的本地JIRA实例中确实存在密钥TEST-2问题,我可以在JIRA应用程序中“手动”添加附件。我知道我必须添加一个类型为“X-Atlassian-Token:nocheck”的头来防止XSRF,但是,从输出来看,我一定是做错了什么。。更让我困惑的是,在XSRF检查失败后抛出了404。 我在谷歌上搜索
我有一个非常简单的REST API,它使用了jersey 2.x(Glassfish)。当我只输出hello world字符串时,它就起作用了。但是,当我添加几个JAR并在一行代码中使用它们时,它会抛出大量class错误。我没有编译或语法错误。这个错误很长,所以如果我在里面装了很多垃圾,请原谅。 我看到了很多解决这个问题的方法,但是我不理解它们的术语,例如,类路径需要被修复等等。 代码 eclip
我正在尝试为尚未添加到GitHub Enterprise安装中的任何团队或组织的用户生成组织邀请。 我已经按照医生的指示: https://developer.github.com/v3/orgs/members/#create-组织邀请 并根据需要添加Accept标头: 应用程序/vnd.github.dazzler-preview json 我是该组织的所有者,但我仍然只收到: {"消息":"
问题内容: 假设我捕获了一个屏幕截图。这是我的代码 而不是将其保存到图像中,我希望能够将其发送到我的SQL或MySQL并将它们存储为BLOB。 我也知道查询数据库。我不知道是中间部分。 在BLOB列中将使用哪种类型的INSERT插入,我猜这将是一个? 如果它是一个“字节”,则转换非常容易。 这样以后我就可以准备查询了 如果不是,那是 什么类型 以及 如何转换 问题答案: 您是正确的,您只需要将其上
我想创建一个纯/文本哑剧类型文件,使用PHP和谷歌应用程序引擎上的谷歌驱动器的谷歌API。 当我使用: 没有内容写入文件。 如果我使用: 内容将添加到文件中。 这段代码来自Google文档: 显示“文本/纯”类型的 mime 类型的代码行 但是,同样,如果我使用它,则不会向文件中添加任何内容。创建纯文本文件和添加内容的设置是什么? 我的完整代码是这样的:
问题内容: 我正在尝试在每天创建目录的目录中创建日志,但是fileHandler没有创建目录,而是其抛出异常 无法获取C:\ dir_date \ Logging.txt的锁 (此处dir_date不存在,我正在尝试创建登录到该目录)。我可以通过“ fileHandler”创建目录吗? log4J甚至可以创建目录(如果不存在),这是否可以通过fileHandler进行? 问题答案: julFile