我用了点头,然后卷曲使用
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