下沉后的Pdf文件损坏

问题描述 投票:0回答:1

我正在使用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);
    }
})

任何人都可以帮助解决以上代码的问题吗?

jquery ajax dropbox-api sharetribe
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();

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

© www.soinside.com 2019 - 2024. All rights reserved.