【发布时间】:2021-10-22 10:59:33
【问题描述】:
如何使用 CloudFunctions 在 Google 驱动器上上传文本文件?
文件已在本地文件夹中创建,但不知道如何在元数据正文中传递它。
我遵循以下方法:
第 1 步:写入文件
// Write file
fs.writeFileSync("sample.txt", "Hello content!");
第 2 步:准备元数据
const metadata = {
name: "sample.txt",
parents: [parentFolder],
mimeType: "text/plain",
uploadType: "media",
};
第 3 步:调用 Google Drive API 上传文件
axios({
method: "POST",
url: "https://www.googleapis.com/drive/v3/files?supportsAllDrives=true",
headers: {
Authorization: `Bearer ${token}`,
Accept: "application/json",
"Content-Type": "application/json",
},
data: metadata,
})
.then((res) => {
response.status(200).send(res.data);
})
.catch((err) => {
response.status(500).send(err.message);
});
所以整个函数代码是:
exports.onCreateFile = functions.https.onRequest((request, response) => {
// <-- Some validation -->
const parentFolder = request.query.parentFolder;
if (!parentFolder) {
response.status(400).send("Parent folder not found");
return;
}
// Write file
fs.writeFileSync("vault.txt", "Hello content!");
const metadata = {
name: "vault.txt",
parents: [parentFolder],
mimeType: "text/plain",
uploadType: "media",
};
axios({
method: "POST",
url: "https://www.googleapis.com/drive/v3/files?supportsAllDrives=true",
headers: {
Authorization: `Bearer ${token}`,
Accept: "application/json",
"Content-Type": "application/json",
},
data: metadata,
})
.then((res) => {
// console.log(res.data);
response.status(200).send(res.data);
})
.catch((err) => {
// console.log(err);
response.status(500).send(err.message);
});
});
基本上移动应用会通过传递accessToken和parentFolderId来调用CloudFunction,而cloudFunction会在一些业务逻辑之后上传文件。
【问题讨论】:
-
云函数在哪里?
-
@MartinZeitler 我已经更新了描述。
标签: node.js firebase google-cloud-functions google-drive-api