通过Ajax上传到Dropbox时损坏的文件

时间:2016-07-21 07:59:53

标签: javascript ajax dropbox dropbox-api

我尝试使用Dropbox API通过使用Ajax的Web界面将文件发送到特定的Dropbox文件夹。

这是我的代码:

function UploadFile(token, callback) {

    var fileName        = $('input[type=file]')[0].files[0].name,
        fileData        = new FormData($('#file-upload')[0]),
        dbxHeaderParams = {
            'path': '/' + fileName,
            'mode': { '.tag': 'add' },
            'autorename': true
        };

    $.ajax({
        url: 'https://content.dropboxapi.com/2/files/upload',
        type: 'POST',
        headers: {
            'Authorization': 'Bearer ' + token,
            'Content-Type': 'application/octet-stream',
            'Dropbox-API-Arg': JSON.stringify(dbxHeaderParams)
        },
        data: fileData,
        processData: false,
        contentType: false,
        success: function(result) {
            console.log('NICE BRO');
            callback();
        },
        error: function(error) {
            console.error(error);
            callback();
        }
    });

}

此代码有效:文件上传到我的Dropbox文件夹,我可以打开它们。他们甚至拥有正确的名称和(几乎)正确的尺寸。但问题是它们都已损坏,因为在此过程中会添加一些行。

以下是一个示例:如果我要上传包含此内容的.txt文件:

harder better faster stronger

上传到我的Dropbox后,它将如下所示:

-----------------------------2308927457834
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain

harder better faster stronger
-----------------------------2308927457834--

我认为这就是为什么我无法打开像图像这样的文件的原因。我尝试了几种解决方案,但没有一种能解决这个问题。我究竟做错了什么 ?谢谢 !

1 个答案:

答案 0 :(得分:1)

查看HTML的相关部分会很有用,但看起来问题是您为上传调用提供了println!("{}", x)个对象,而不是FormData

尝试替换此行:

File

用这个:

        fileData        = new FormData($('#file-upload')[0]),