Я пытаюсь загрузить данные в Dropbox через webbrowser (FF 42.0, PhantomJS 1.9.8) и dropbox v2 api. Моя функция выглядит следующим образомИспользование Dropbox v2 API из браузера
function(path, data, callback) {
$.ajax({
url: 'https://content.dropboxapi.com/2/files/upload',
type: 'post',
contentType: 'application/octet-stream',
beforeSend: function(jqXHR) {
jqXHR.setRequestHeader("Content-Type","application/octet-stream");
},
data: data,
headers: {
"Authorization": "Bearer " + token,
"Dropbox-API-Arg": '{"path": "' + path + ',"mode": "add","autorename": true,"mute": false}',
"Content-Type": "application/octet-stream"
},
success: function (data) {
callback(data);
}
});
}
Даже я установить Content-Type на все атрибуты я могу думать, чтобы application/octet-stream
я получаю следующую ошибку
Error in call to API function "files/upload": Bad HTTP "Content-Type" header: "application/octet-stream
; charset=UTF-8". Expecting one of "application/octet-stream", "text/plain; charset=dropbox-cors-hack"
Взглянув на просьбе в Firebug показывает мне что Content-Type действительно установлен на application/octet-stream; charset=UTF-8
. При попытке text/plain; charset=dropbox-cors-hack
как Content-Type отправленный запрос имеет text/plain; charset=UTF-8
, и я получаю то же сообщение об ошибке.
Как я могу сделать jquery и мой браузер, чтобы установить нужные заголовки.
EDIT: То же самое поведение в Chrome IE работает, как ожидалось
чудесный ответ Greg +1 Я хотел бы добавить ссылку на TextEncoder Шим, которые могут быть полезны поскольку TextEncoder не поддерживается всеми браузерами: https://github.com/inexorabletash/text-encoding – Kai