2016-07-21 6 views
0

Я пытаюсь использовать Dropbox API для отправки файлов в определенную папку Dropbox через веб-интерфейс с помощью Ajax.Поврежденные файлы при загрузке в Dropbox через Ajax

Вот мой код:

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

Обратите внимание, что соответствующие фрагменты HTML будут полезны, но похоже, что проблема заключается в том, что вы отправляете объект FormData на вызов для загрузки, в отличие от File.

Попробуйте заменить эту строку:

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

с этим:

 fileData  = $('input[type=file]')[0].files[0], 
+0

Это сделал трюк, спасибо! Но я до сих пор не понимаю, зачем ему нужен тип «Файл», потому что почти все примеры, которые я нашел в Интернете, использовали такие объекты FormData, как этот (очень) популярный вопрос: http://stackoverflow.com/questions/166221/как-кан-I-Upload-файлы-асинхронно? RQ = 1 – Flobesst