Я использую Dropbox Core API для загрузки и скачивания файлов через расширение chrome. Когда я загружаю текстовые файлы, например, с расширениями .txt, .js, .json или .c, файлы загружаются успешно, но когда я загружаю файлы с расширениями .pdf, .jpg и т. Д. (Медиафайлы), тогда содержимое обезображается или отсутствует, хотя размер файла не равен нулю, иногда даже больше, чем исходный файл. Это явно означает, что данные, которые читаются, также записываются, но я предполагаю, что есть некоторые проблемы с тем, как я читаю или записываю данные. Код приведен ниже для справки.Несогласованное содержимое файла при загрузке через Dropbox API
$(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);
}
Вы всегда положить CONTENTTYPE как «текст/обычный», который работает отлично для текстовых файлов, которые вы упомянули, но не для других, замените его на вашу переменную contentType, которую вы отправляете на функцию – juvian
@juvian Извините, что я отправил старый код здесь, я уже исправил это, теперь я передаю тип содержимого после чтения 'file.type'. Тем не менее проблема сохраняется. – bawejakunal
Вместо этого попробуйте использовать readAsArrayBuffer. Если он по-прежнему не работает, попробуйте добавить заголовок Accept для текста/plain; charset = iso-8859-1 и размещение типа контента в виде текста/plain; charset = iso-8859-1 – juvian