通过Google Drive API Javascript将图像从URL上传到Google Drive
我是Javascript新手,如果你觉得我的问题很蹩脚,我很抱歉。我想从我的网站上传一张图片到我的谷歌硬盘。我已经成功实现了身份验证和文件夹创建部分,但我对上传过程感到困惑。通过Google Drive API Javascript将图像从URL上传到Google Drive,javascript,file-upload,google-drive-api,Javascript,File Upload,Google Drive Api,我是Javascript新手,如果你觉得我的问题很蹩脚,我很抱歉。我想从我的网站上传一张图片到我的谷歌硬盘。我已经成功实现了身份验证和文件夹创建部分,但我对上传过程感到困惑。 假设这是我在Google Drive中创建文件夹的代码: function createFolder(folderName) { var parentId = 'xxxxxxx';//some parentId of a folder under which to create the new folder var
假设这是我在Google Drive中创建文件夹的代码:
function createFolder(folderName) {
var parentId = 'xxxxxxx';//some parentId of a folder under which to create the new folder
var fileMetadata = {
'name' : folderName,
'mimeType' : 'application/vnd.google-apps.folder',
'parents': [parentId]
};
gapi.client.drive.files.create({
resource: fileMetadata,
}).then(function(response) {
switch(response.status){
case 200:
var file = response.result;
console.log('Created Folder Id: ', file.id);
uploadImage(file.id);
break;
default:
console.log('Error creating the folder, '+response);
break;
}
});
}
现在我想从这个url上传我的图片:https://xxxxxx.com
从上层响应(file.id
)进入新创建的文件夹
这是我在GoogleAPI文档中得到的,但是我应该把我的url放在哪里
function uploadImage(folderId) {
var fileMetadata = {
'name': 'photo.jpg',
parents: [folderId]
};
var media = {
mimeType: 'image/jpeg',
body: fs.createReadStream('files/photo.jpg')
};
drive.files.create({
resource: fileMetadata,
media: media,
fields: 'id'
}, function (err, file) {
if (err) {
// Handle error
console.error(err);
} else {
console.log('File Id: ', file.id);
}
});
}
提前非常感谢。尝试使用以下片段上载照片文件:
// download file from website
const http = require('https')
const fs = require('fs')
let file = fs.createWriteStream('Photo001.jpg')
let request = http.get(
'https://ssl.gstatic.com/ui/v1/icons/mail/rfr/logo_gmail_lockup_default_2x.png',
(response) => {
response.pipe(file)
})
// upload file to Google Drive
let fileMetadata = {
'name' : 'Photo001',
'mimeType': 'image/jpeg'
}
let media = {
mimeType : 'image/jpeg',
body : fs.createReadStream('Photo001.jpeg')
}
function uploadFile(auth){
const drive = google.drive({version: 'v3', auth})
drive.files.create({
resource: fileMetadata,
media : media,
fields : 'id'
}, (err, res) => {
if (err) return console.log('The API returned an error: ' + err)
})
}
文档
- 您希望从URL下载一个文件,并使用Javascript将下载的文件上载到Google Drive
- 在您的情况下,您的
可用于将文件上载到Google Drivegapi.client
- 不幸的是,在当前阶段,
gapi.client.drive.files.create仍然无法发送包含内容的请求。因此,在本例中,我建议使用
作为解决方法。使用fetch
时,可以使用fetch
请求文件内容和元数据多部分/表单数据
- 在此解决方案中,访问令牌是从
使用的。因此,此脚本假定您的gapi.client
可用于上载文件。请小心这个gapi.client
- 运行此脚本时,可以在控制台上看到以下结果。(当URL是Jpeg图像文件的直接链接时。)
- 在这种情况下,将使用
。因此,最大文件大小为5MB。请小心这个。当您想使用超过5 MB的数据时,请检查可恢复上传李>uploadType=multipart
- 我相信你的目标如下
function doGet(e) {
const imageUrl = e.parameter.imageUrl;
const res = UrlFetchApp.fetch(imageUrl);
if (res.getResponseCode() != 200) throw new Error("Image couldn't be retrieved.");
const blob = res.getBlob();
const file = DriveApp.getFolderById(e.parameter.folderId).createFile(blob.setName(e.parameter.filename));
const obj = {id: file.getId(), name: file.getName(), mimeType: file.getMimeType()};
return ContentService.createTextOutput(JSON.stringify(obj)).setMimeType(ContentService.MimeType.JSON);
}
3.部署Web应用程序。
- 这样,脚本将作为所有者运行
https://script.google.com/macros/s/###/exec
。
- 当您修改Google Apps脚本时,请重新部署为新版本。这样,修改后的脚本将反映到Web应用程序中。请注意这一点。
const imageUrl = "###"; // Please set the URL of image.
const url = "https://script.google.com/macros/s/###/exec"; // Please set the URL of Web Apps.
const qs = new URLSearchParams({
imageUrl: imageUrl,
filename: "sample filename",
folderId: "###", // Please set folder ID.
});
fetch(`${url}?${qs}`).then((res) => res.json()).then(console.log).catch(console.log);
结果:
当运行上述脚本时,将返回以下值。您可以在控制台上看到返回的值
{
"id": "###",
"name": "###",
"mimeType": "###"
}
注:
- 修改Web应用脚本时,请将Web应用重新部署为新版本。这样,最新的脚本就会反映到Web应用程序中。请注意这一点。
fileMetadata
下看到了name:photo.jpg
,但我有url而不是任何图像名称。那么,我如何用这个函数附加我的url,以便将其上传到我的谷歌硬盘上呢。谢谢看看我的答案,测试一下,让我知道你的结果谢谢你的回答。但是我会把我的图片URL的值附加到哪里呢?正如我所说的
const imageUrl = "###"; // Please set the URL of image.
const url = "https://script.google.com/macros/s/###/exec"; // Please set the URL of Web Apps.
const qs = new URLSearchParams({
imageUrl: imageUrl,
filename: "sample filename",
folderId: "###", // Please set folder ID.
});
fetch(`${url}?${qs}`).then((res) => res.json()).then(console.log).catch(console.log);
{
"id": "###",
"name": "###",
"mimeType": "###"
}