我使用过nodejs,然后卷曲以使用files/{fileid}?alt=media
。
我得到数据,那不是问题。但是当我使用浏览器从驱动器下载时,获得的数据不足文件大小,并且下载的文件绝对不是JPG。我检查了十六进制的第一个字节,起始字符错误。但是许多后续字符都是正确的。我以为这是一个编码问题,但是我花了大约4个小时来尝试我能想到的一切。
我使用nodejs API下载的文件如下所示
00000000: fdfd fdfd 0010 4a46 4946 0001 0100 0001 ......JFIF......
真实文件如下:
00000000: ffd8 ffe0 0010 4a46 4946 0001 0100 0001 ......JFIF......
ffd8是JPEG的正确起始字节,因此真实文件是正确的。
有什么想法吗?
我使用CURL下载的内容看起来更加不同,所以我可能在这里做错了。
最后,我剥离了代码并执行了从节点到api的纯https函数:
var params = "";
const options = {
hostname: "www.googleapis.com",
headers : {
'Content-Type' : 'application/x-www-form-urlencoded',
'Authorization' : 'Bearer '+file_token.access_token,
},
port: 443,
path: "/drive/v3/files/"+file_id+"/?alt=media",
method: 'GET'
};
var req = https.request(options, function(res) {
const statusCode = res.statusCode;
const contentType = res.headers['content-type'];
res.setEncoding('binary');
var rawData = '';
let rdata = [ ];
res.on('data', function (chunk) { rdata.push(Buffer.from(chunk, 'binary')); rawData += chunk; });
res.on('end', function () {
try {
var rbinary = Buffer.concat(rdata);
fs.writeFileSync("/tmp/xxx.jpg", rdata);
} catch (E) {
console.log(E);
}
})
});
req.write(params);
req.end();
有了这个,我得到的结果甚至更糟:
0000000: efbf bdef bfbd efbf bdef bfbd 0010 4a46 ..............JF
答案 0 :(得分:0)
我认为您的脚本几乎是正确的。但是有一个修改点。那么您可以进行以下修改吗?
fs.writeFileSync("/tmp/xxx.jpg", rdata);
fs.writeFileSync("/tmp/xxx.jpg", rbinary);
如果这不起作用,请告诉我。我想修改它。