目标是让应用程序的用户通过浏览器从Google Drive下载图像(jpg(。
使用下面的代码,我确实设法让浏览器提示"另存为"对话框,用户将文件保存到磁盘,但试图打开jpg文件会导致错误:
"解释JPEG图像文件时出错(不是JPEG文件:以0xc3 0xbf开头(";
下面的代码有问题吗?
或者可能是"response.body"需要解压,因为该响应有一个";内容编码:gzip"?
const downloadFile = (fileId) => {
gapi.client.drive.files.get({
fileId: fileId,
alt: "media",
})
.then((response) => {
const objectUrl = URL.createObjectURL(new Blob([response.body] , {type:'image/jpeg'}))
// 'ref' is 'userRef' React hook pointing to an anchor element:
ref.current.href = objectUrl
ref.current.download = 'my-image.jpg'
ref.current.click()
})
.catch((err) => console.log(err))
}
我在您的情况下也遇到过同样的问题。当时,我首先将返回的值转换为Unit8Array,并将其转换为blob。那么,在你的脚本中,下面的修改怎么样?
发件人:
const objectUrl = URL.createObjectURL(new Blob([response.body] , {type:'image/jpeg'}))
收件人:
const objectUrl = URL.createObjectURL(new Blob([new Uint8Array(response.body.length).map((_, i) => response.body.charCodeAt(i))], {type: 'image/jpeg'}));