Google Drive API V3 Javascript - 创建包含内容的文件
Google Drive API V3 Javascript - Create File with Content
这个问题以前有人问过,但答案是使用 API V2。 google 文档没有阐明如何使用 javascript 客户端代码创建包含其内容的文件。我尝试使用 Node 下列出的代码,但是,它只创建文件,不插入任何内容。这是我的代码:
let fileMetadata = {
'name': name,
parents: [parentId]
};
let media = {
mimeType: 'text/plain',
body: 'content inside file'
};
gapi.client.drive.files.create({
resource: fileMetadata,
media,
fields: 'id'
})
.then(response => {
console.log('response: ', response);
})
.catch(() => {
console.log('something is wrong');
});
有人可以帮我将内容插入文件吗?
这个示例脚本怎么样?在我的环境中,虽然 gapi.client.drive.files.create()
可以在 Google 驱动器上创建一个空文件,但它不能直接上传包含内容的文件。我认为这可能无法使用 multipart/related 上传文件和元数据,尽管这可能会在未来的更新中解决。所以现在,作为解决方法之一,我使用 XMLHttpRequest。
在使用此示例脚本之前,请确认以下几点。
- 在您的情况下,您已经能够使用 gapi 创建文件。在我的脚本中,使用 gapi 检索访问令牌。
- 使用此脚本时,请设置文件内容和元数据。
示例脚本:
在此示例脚本中,在文件夹下创建了一个包含内容的文本文件。
var fileContent = 'sample text'; // As a sample, upload a text file.
var file = new Blob([fileContent], {type: 'text/plain'});
var metadata = {
'name': 'sampleName', // Filename at Google Drive
'mimeType': 'text/plain', // mimeType at Google Drive
'parents': ['### folder ID ###'], // Folder ID at Google Drive
};
var accessToken = gapi.auth.getToken().access_token; // Here gapi is used for retrieving the access token.
var form = new FormData();
form.append('metadata', new Blob([JSON.stringify(metadata)], {type: 'application/json'}));
form.append('file', file);
var xhr = new XMLHttpRequest();
xhr.open('post', 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id');
xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
xhr.responseType = 'json';
xhr.onload = () => {
console.log(xhr.response.id); // Retrieve uploaded file ID.
};
xhr.send(form);
请求正文:
在这个脚本中,form
如下。这是使用 Drive API.
的创建方法发送到 Google Drive
------WebKitFormBoundaryxX0XmxgooMjdUECR
Content-Disposition: form-data; name="metadata"; filename="blob"
Content-Type: application/json
{"name":"sampleName","mimeType":"text/plain","parents":["#####"]}
------WebKitFormBoundaryxX0XmxgooMjdUECR
Content-Disposition: form-data; name="file"; filename="blob"
Content-Type: text/plain
sample text
------WebKitFormBoundaryxX0XmxgooMjdUECR--
在我的环境中,我确认这工作正常。但如果这在您的环境中不起作用,我很抱歉。
这个问题以前有人问过,但答案是使用 API V2。 google 文档没有阐明如何使用 javascript 客户端代码创建包含其内容的文件。我尝试使用 Node 下列出的代码,但是,它只创建文件,不插入任何内容。这是我的代码:
let fileMetadata = {
'name': name,
parents: [parentId]
};
let media = {
mimeType: 'text/plain',
body: 'content inside file'
};
gapi.client.drive.files.create({
resource: fileMetadata,
media,
fields: 'id'
})
.then(response => {
console.log('response: ', response);
})
.catch(() => {
console.log('something is wrong');
});
有人可以帮我将内容插入文件吗?
这个示例脚本怎么样?在我的环境中,虽然 gapi.client.drive.files.create()
可以在 Google 驱动器上创建一个空文件,但它不能直接上传包含内容的文件。我认为这可能无法使用 multipart/related 上传文件和元数据,尽管这可能会在未来的更新中解决。所以现在,作为解决方法之一,我使用 XMLHttpRequest。
在使用此示例脚本之前,请确认以下几点。
- 在您的情况下,您已经能够使用 gapi 创建文件。在我的脚本中,使用 gapi 检索访问令牌。
- 使用此脚本时,请设置文件内容和元数据。
示例脚本:
在此示例脚本中,在文件夹下创建了一个包含内容的文本文件。
var fileContent = 'sample text'; // As a sample, upload a text file.
var file = new Blob([fileContent], {type: 'text/plain'});
var metadata = {
'name': 'sampleName', // Filename at Google Drive
'mimeType': 'text/plain', // mimeType at Google Drive
'parents': ['### folder ID ###'], // Folder ID at Google Drive
};
var accessToken = gapi.auth.getToken().access_token; // Here gapi is used for retrieving the access token.
var form = new FormData();
form.append('metadata', new Blob([JSON.stringify(metadata)], {type: 'application/json'}));
form.append('file', file);
var xhr = new XMLHttpRequest();
xhr.open('post', 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id');
xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
xhr.responseType = 'json';
xhr.onload = () => {
console.log(xhr.response.id); // Retrieve uploaded file ID.
};
xhr.send(form);
请求正文:
在这个脚本中,form
如下。这是使用 Drive API.
------WebKitFormBoundaryxX0XmxgooMjdUECR
Content-Disposition: form-data; name="metadata"; filename="blob"
Content-Type: application/json
{"name":"sampleName","mimeType":"text/plain","parents":["#####"]}
------WebKitFormBoundaryxX0XmxgooMjdUECR
Content-Disposition: form-data; name="file"; filename="blob"
Content-Type: text/plain
sample text
------WebKitFormBoundaryxX0XmxgooMjdUECR--
在我的环境中,我确认这工作正常。但如果这在您的环境中不起作用,我很抱歉。