我正在使用Sharetribe平台,我无法触摸服务器代码,只能访问自定义脚本。因此,我使用jquery ajax将文件上传和下载到保管箱。上载过程顺利进行,但下载过程中存在下载文件损坏的问题。不能通过任何pdf软件打开。我还发现文件的大小比我的保管箱中的原始pdf文件大。原始的pdf文件很好,可以完美打开。
这是下载文件的代码。
var url = 'https://content.dropboxapi.com/2/files/download';
$.ajax({
url: url,
type: 'post',
responseType: 'arraybuffer',
headers: {
"Authorization": "Bearer <TOKEN>",
"Dropbox-API-Arg": JSON.stringify({"path": "/"+filename})
},
success: function (data){
console.log(data);
//CAN DOWNLOAD PDF BUT CAN'T OPEN IT. FILE PDF IS CORRUPT
//var blob = new Blob([data]);
//var aLink = document.createElement('a');
//aLink.href = window.URL.createObjectURL(blob);
//aLink.download = "file_tc.pdf";
//aLink.click();
const url = window.URL.createObjectURL(new Blob([data], { type: 'application/pdf' }));
window.open(url);
},
error: function (data){
console.log(data);
}
})
任何人都可以帮助解决以上代码的问题吗?
我读了http://keyangxiang.com/2017/09/01/HTML5-XHR-download-binary-content-as-Blob/。我发现普通的jquery ajax不支持blob
或arraybuffer
。然后我按照建议添加了beforeSend
处理程序,但仍然无法正常工作,因此我改用XMLHTTPRequest
。运作良好。我得到了正确的pdf文件和大小。这是我的代码更改:
var url = 'https://content.dropboxapi.com/2/files/download';
var token = 'YOUR-ACCESS-TOKEN';
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var url = (window.URL || window.webkitURL).createObjectURL(xhr.response);
var aLink = document.createElement('a');
document.body.appendChild(aLink);
aLink.href = url;
aLink.download = filename;
aLink.click();
}
};
xhr.open('POST', 'https://content.dropboxapi.com/2/files/download');
xhr.setRequestHeader('Authorization', 'Bearer ' + token);
xhr.setRequestHeader('Dropbox-API-Arg', JSON.stringify({"path": "/"+filename}));
xhr.send();
希望这会帮助遇到相同问题的人。