1

我正在使用 Sharetribe 平台,我无法触及服务器代码,只能访问自定义脚本。所以我使用 jquery ajax 将文件上传和下载到 Dropbox。上传过程很顺利,但下载的一个问题是下载的文件已损坏。任何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);
    }
})

任何人都可以帮助上面的代码有什么问题?

4

1 回答 1

0

我读了http://keyangxiang.com/2017/09/01/HTML5-XHR-download-binary-content-as-Blob/。我发现普通的 jquery ajax 不支持blobarraybuffer. 然后我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();

希望这会帮助遇到同样问题的人。

于 2019-10-27T13:49:32.517 回答