Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过Dropbox API上载时文件内容不一致_Javascript_Dropbox_Dropbox Api_Filereader - Fatal编程技术网

Javascript 通过Dropbox API上载时文件内容不一致

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()

我使用的是通过chrome扩展上传和下载文件。当我上载扩展名为.txt、.js、.json或.c的文本文件时,文件上载成功,但当我上载扩展名为.pdf、.jpg等的文件(媒体文件)时,内容会变形或缺失,尽管文件大小不是零,有时甚至比原始文件大。这显然意味着读取的数据也在被写入,但我猜我读取或写入数据的方式存在一些问题。代码发布在下面以供参考

$(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我没有发现任何不一致之处。你试过了吗?