Google 驱动器 API 响应中不需要的 "content-type: text/plain;charset=UTF-8" header
Unwanted "content-type: text/plain;charset=UTF-8" header in Google Drive API Response
我正在使用浏览器 GAPI 库从 Google Drive 请求一段二进制数据。 google 服务器的响应总是有一个content-type: text/plain;charset=UTF-8
header,因此,浏览器总是将二进制数据解码为UTF-8 字符串。
此外,解码过程似乎在原始二进制数据中添加了填充。例如,一个282字节的二进制文件经过UTF-8解码后变成422字节长。
有没有办法告诉GoogleAPI服务器改变content-typeheader?
或者有没有办法绕过响应的预处理 body 并获取原始响应?
我的请求代码列在这里:
currentApiRequest = {
path: `https://www.googleapis.com/drive/v3/files/${fileID}`,
params: {
alt: "media"
}
}
gapi.client.request(currentApiRequest).then(
(response) => {
let data = response.body;
console.log(byteSize(data));
console.log(data);
}
)
下面的修改怎么样?在这个修改中,首先将检索到的数据转换为Unit8Array并将其转换为blob。
修改后的脚本:
const fileID = "###"; // Please set your file ID.
currentApiRequest = {
path: `https://www.googleapis.com/drive/v3/files/${fileID}`,
params: {alt: "media"}
};
gapi.client.request(currentApiRequest)
.then((response) => {
let data = response.body;
const blob = new Blob([new Uint8Array(data.length).map((_, i) => data.charCodeAt(i))]);
// When you use the following script, you can confirm whether this blob can be used as the correct data.
const filename = "sample.png"; // Please set the sample filename.
const a = document.createElement('a');
document.body.appendChild(a);
a.href = URL.createObjectURL(blob);
a.download = filename;
a.click();
});
参考文献:
- gapi.client.request(args)
- 相关线程。
- 在此线程中,使用了从
gapi.client.drive.files.get()
检索到的数据。另一方面,在这个问题中,使用了从 gapi.client.request()
检索到的数据。我认为这可能对其他用户也有用。所以我发布了这个答案,没有标记为重复。
我正在使用浏览器 GAPI 库从 Google Drive 请求一段二进制数据。 google 服务器的响应总是有一个content-type: text/plain;charset=UTF-8
header,因此,浏览器总是将二进制数据解码为UTF-8 字符串。
此外,解码过程似乎在原始二进制数据中添加了填充。例如,一个282字节的二进制文件经过UTF-8解码后变成422字节长。
有没有办法告诉GoogleAPI服务器改变content-typeheader?
或者有没有办法绕过响应的预处理 body 并获取原始响应?
我的请求代码列在这里:
currentApiRequest = {
path: `https://www.googleapis.com/drive/v3/files/${fileID}`,
params: {
alt: "media"
}
}
gapi.client.request(currentApiRequest).then(
(response) => {
let data = response.body;
console.log(byteSize(data));
console.log(data);
}
)
下面的修改怎么样?在这个修改中,首先将检索到的数据转换为Unit8Array并将其转换为blob。
修改后的脚本:
const fileID = "###"; // Please set your file ID.
currentApiRequest = {
path: `https://www.googleapis.com/drive/v3/files/${fileID}`,
params: {alt: "media"}
};
gapi.client.request(currentApiRequest)
.then((response) => {
let data = response.body;
const blob = new Blob([new Uint8Array(data.length).map((_, i) => data.charCodeAt(i))]);
// When you use the following script, you can confirm whether this blob can be used as the correct data.
const filename = "sample.png"; // Please set the sample filename.
const a = document.createElement('a');
document.body.appendChild(a);
a.href = URL.createObjectURL(blob);
a.download = filename;
a.click();
});
参考文献:
- gapi.client.request(args)
- 相关线程。
- 在此线程中,使用了从
gapi.client.drive.files.get()
检索到的数据。另一方面,在这个问题中,使用了从gapi.client.request()
检索到的数据。我认为这可能对其他用户也有用。所以我发布了这个答案,没有标记为重复。