Javascript 通过Dropbox API上载时文件内容不一致
我使用的是通过chrome扩展上传和下载文件。当我上载扩展名为.txt、.js、.json或.c的文本文件时,文件上载成功,但当我上载扩展名为.pdf、.jpg等的文件(媒体文件)时,内容会变形或缺失,尽管文件大小不是零,有时甚至比原始文件大。这显然意味着读取的数据也在被写入,但我猜我读取或写入数据的方式存在一些问题。代码发布在下面以供参考Javascript 通过Dropbox API上载时文件内容不一致,javascript,dropbox,dropbox-api,filereader,Javascript,Dropbox,Dropbox Api,Filereader,我使用的是通过chrome扩展上传和下载文件。当我上载扩展名为.txt、.js、.json或.c的文本文件时,文件上载成功,但当我上载扩展名为.pdf、.jpg等的文件(媒体文件)时,内容会变形或缺失,尽管文件大小不是零,有时甚至比原始文件大。这显然意味着读取的数据也在被写入,但我猜我读取或写入数据的方式存在一些问题。代码发布在下面以供参考 $(document).on("click", "#id_submit",uploadProcess); function uploadProcess()
$(document).on("click", "#id_submit",uploadProcess);
function uploadProcess()
{
var file = $("#upload_file")[0].files[0];
console.log(file);
if (!file){
alert ("No file selected to upload.");
return false;
}
var reader = new FileReader();
//reader.readAsText(file, "UTF-8");
reader.readAsBinaryString(file);
reader.onload = function (evt) {
uploadFile(file.name, evt.target.result, file.size, file.type);
//console.log(evt.target.result);
var control = $("#upload_file");
control.replaceWith( control = control.clone( true ));
}
}
//function to upload file to folder
function uploadFile(filepath,data,contentLength,contentType){
var url = "https://api-content.dropbox.com/1/files_put/auto/"+filepath;
var headers = {
Authorization: 'Bearer ' + getAccessToken(),
contentLength: contentLength
}
var args = {
url: url,
headers: headers,
crossDomain: true,
crossOrigin: true,
type: 'PUT',
contentType: contentType,
data : data,
dataType: 'json',
success: function(data)
{
console.log(data);
},
error: function(jqXHR)
{
console.log(jqXHR);
}
};
$.ajax(args);
}
实际上,您可以在ajax请求中传递文件(取决于浏览器支持)。只需在args对象中传递文件,还需要将processDate和contentType设置为false,以防止$.ajax操纵文件对象
var args = {
...
contentType: false,
data : file,
processData: false,
...
};
您总是将contentType设置为“text/plain”,这对您提到的文本文件很有效,但对其他文本文件无效,请将其替换为发送到function@juvian抱歉,我在这里发布了旧代码,我已经更正了,现在我在阅读
文件后传递内容类型。type
。问题仍然存在。请尝试改用readAsArrayBuffer。如果仍然不起作用,请尝试添加文本/纯文本的Accept标头;字符集=iso-8859-1,内容类型为文本/普通;字符集=iso-8859-1@juvian那也不行。修订后的代码张贴在这里。奇怪,尝试向dropbox支持发送电子邮件。我知道我们可以在ajax请求中传递文件,但这与dropbox api规范不一致。@bawejakunal我没有发现任何不一致之处。你试过了吗?