Dropbox选择器返回损坏的文件
Dropbox Chooser returns corrupted file
在这里张贴,因为我没有收到回复在dropbox论坛。Dropbox论坛帖子
几个月前,我实现了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);
在控制台中,"文件大小"answers"标题大小"的值是相同的,但"缓冲区大小",responseText,它更小…
为什么dropbox返回所有的文件内容?
我认为问题是你正在阅读XMLHttpRequest
的responseText
字段而不是response
。我的猜测是,这会导致(错误地)尝试将数据解释为文本字符。
EDIT:您还需要将arrayBuffer
更改为arraybuffer
以实际获得ArrayBuffer
。然后,您需要检查byteLength
字段,以获得ArrayBuffer
中包含的实际字节数。
注意,要使用arraybuffer
响应类型,您需要切换到使用异步XMLHttpRequest
。(将false
的最后一个参数更改为xhr.open
或将其值更改为true
)
EDIT2:
一个工作(对我来说)的例子是在https://downloadtest.site44.com。代码如下:
Dropbox.choose({
success: function (files) {
var xhr = new XMLHttpRequest();
xhr.open('GET', files[0].link);
xhr.responseType = 'arraybuffer';
xhr.onreadystatechange = function (oEvent) {
if (xhr.readyState === 4 && xhr.status === 200) {
var buffer = xhr.response;
console.log('File size: ' + files[0].bytes +
' | Buffer size: ' + buffer.byteLength +
' | Header size: ' + xhr.getResponseHeader('Content-Length'));
}
};
xhr.send();
},
linkType: 'direct'
});
相关文章:
- 将 MVC 3 应用程序部署到 URL 文件夹已损坏 JavaScript 和内容路径
- 节点 js 流星 js 图像文件上传图像损坏
- 如果数据的格式略有损坏,是否仍然可以确定其文件类型
- 图像文件因websocket文件传输而损坏
- AJAX响应提供了一个损坏的压缩(.tgz)文件
- 存储/检索 html 5 文件对象,用于恢复损坏的文件上传
- Javascript Blob 锚标记下载生成损坏的文件
- jsPDF 不完整或损坏的 PNG 文件
- Base64 - 文件已损坏
- 如何使用javascript和jquery-file-upload检测损坏的非常大的图像文件
- 使用nodeJS上传时文件损坏
- 如何在 Node.js 中检测损坏的图像文件
- Base64映像下载:损坏的文件
- MVC ActionResult调用文件下载时mouseup上的图像损坏
- Ajax responseText和echo已损坏,返回头文件内容
- 上传到nodejs时损坏的文件/图像
- 通过PHP下载时文件损坏的原因
- Javascript文件自动损坏
- 导出html到Excel:当尝试打开文件时,它会提示文件损坏
- 使用angular $http下载时文件损坏