Dropbox Chooser返回损坏的文件

时间:2015-08-20 16:46:05

标签: javascript pdf dropbox dropbox-api responsetext

在此发帖,因为我没有在Dropbox论坛收到回复。 dropbox forum post

几个月前,我实施了Dropbox选择器,让一切正常。然后大约一个星期前我遇到了一个问题,其中.pdf文件会打开,但是包含空白页面和.docx文件根本没有打开(.rtf和.txt文件打开就好了)

无论如何,我开始挖掘,结果发现回来的xhr.responseText短了很多字节(pdf文件大约短4%)

我已经查看了字节,文件的开头和结尾都是正确的(不同版本有相同的问题):

%PDF-1.5
...
%% EOF

以下是相关代码:

var options = {
    success: function(files) 
    {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", files[0].link, false);
        xhr.responseType = 'arrayBuffer';
        xhr.onreadystatechange = function(oEvent)
        {
            if (xhr.readyState === 4 && xhr.status === 200)
            {
                    var buffer = xhr.responseText;
                    console.log('File size: ' + files[0].bytes + 
                                ' | Buffer size: ' + buffer.length +
                                ' | Header size: ' + xhr.getResponseHeader('Content-Length'));
            }
        }
        xhr.setRequestHeader("User-Agent", navigator.userAgent);
        try 
        {
            xhr.send(null);
        } 
        catch (err) 
        {
            alert(err);
        }
    },
    linkType: "direct", // or "preview"
    multiselect: false, // or true
};

Dropbox.choose(options);

在控制台中"文件大小"和#34;标题大小"值是相同的,但"缓冲区大小",responseText,它更小......

为什么dropbox会返回所有文件内容?

1 个答案:

答案 0 :(得分:0)

我认为问题在于您正在使用XMLHttpRequest的{​​{1}}字段而不是responseText。我的猜测是,这会导致(错误地)尝试将数据解释为文本字符。

编辑:您还需要将response更改为arrayBuffer才能实际获得arraybuffer。然后,您需要检查ArrayBuffer字段以获取byteLength中包含的实际字节数。

请注意,要使用ArrayBuffer响应类型,您需要切换到使用异步arraybuffer。 (将XMLHttpRequest最后一个参数放到false或将其值更改为xhr.open。)

<强> EDIT2:

工作(对我而言)的例子是https://downloadtest.site44.com。代码如下:

true