1 回答
TA贡献1155条经验 获得超0个赞
我相信你的目标和情况如下。
您想要使用 Drive API 将文件上传到 Google Drive
multipart/form-data
。您的访问令牌可用于将文件上传到 Google 云端硬盘。
我认为在您的情况下,元数据和文件内容不能上传为multipart/form-data
. 这样,文件元数据就无法反映到上传的文件中。所以为了实现这一点,我想提出以下修改。
模式 1:
在此模式中,const request = require("request")
使用。
修改脚本:
const fs = require("fs");
const request = require("request");
token = req.body.token;
fs.readFile("./all.vcf", function (err, content) {
if (err) {
console.error(err);
}
const metadata = {
name: "all.vcf",
mimeType: "text/x-vcard"
};
const boundary = "xxxxxxxxxx";
let data = "--" + boundary + "\r\n";
data += 'Content-Disposition: form-data; name="metadata"\r\n';
data += "Content-Type: application/json; charset=UTF-8\r\n\r\n";
data += JSON.stringify(metadata) + "\r\n";
data += "--" + boundary + "\r\n";
data += 'Content-Disposition: form-data; name="file"\r\n\r\n';
const payload = Buffer.concat([
Buffer.from(data, "utf8"),
Buffer.from(content, "binary"),
Buffer.from("\r\n--" + boundary + "--\r\n", "utf8"),
]);
request(
{
method: "POST",
url:
"https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart",
headers: {
Authorization: token,
"Content-Type": "multipart/form-data; boundary=" + boundary,
},
body: payload,
},
function (err, resp, body) {
if(err){
console.log(err);
}else{
console.log('resp',body);
res.status(200).send()
fs.readdir('./contacts', function (err, files) {
var removefiles = function (file) {
fs.unlinkSync('./contacts/' + file)
}
files.forEach(function (file) {
removefiles(file)
})
})
}
}
);
});
模式 2:
在此模式中,使用节点提取。在您的脚本中,new FormData()使用了。所以我认为这种模式可能是你期望的方向。
修改脚本:
const FormData = require("form-data");
const fetch = require("node-fetch");
const fs = require("fs");
token = req.body.token;
var formData = new FormData();
var fileMetadata = {
name: "all.vcf",
mimeType: "text/x-vcard",
};
formData.append("metadata", JSON.stringify(fileMetadata), {
contentType: "application/json",
});
formData.append("data", fs.createReadStream("./all.vcf"), {
filename: "all.vcf",
});
fetch(
"https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart",
{ method: "POST", body: formData, headers: { Authorization: token } }
)
.then((res) => res.json())
.then((json) => console.log(json))
添加回答
举报