Я пытаюсь отправить изображение (с метаданными) на веб-страницы Picasa из Chrome-Extension.Обратите внимание, что обычный пост с Content-Type image / xyz работает, как я описал здесь .Однако я хочу включить описание / ключевые слова, а спецификация протокола описывает многочастный / связанный формат с XML и частью данных.
Я получаюДанные через HTML5 FileReader и пользовательский файл ввода.Я получаю двоичную строку, используя
FileReader.readAsBinaryString(file);
Предположим, что это мой код обратного вызова после того, как FileReader загрузил строку:
function upload_to_album(binaryString, filetype, albumid) {
var method = 'POST';
var url = 'http://picasaweb.google.com/data/feed/api/user/default/albumid/' + albumid;
var request = gen_multipart('Title', 'Description', binaryString, filetype);
var xhr = new XMLHttpRequest();
xhr.open(method, url, true);
xhr.setRequestHeader("GData-Version", '3.0');
xhr.setRequestHeader("Content-Type", 'multipart/related; boundary="END_OF_PART"');
xhr.setRequestHeader("MIME-version", "1.0");
// Add OAuth Token
xhr.setRequestHeader("Authorization", oauth.getAuthorizationHeader(url, method, ''));
xhr.onreadystatechange = function(data) {
if (xhr.readyState == 4) {
// .. handle response
}
};
xhr.send(request);
}
Функция gen_multipart просто генерирует multipart из входных значений ишаблон XML и производит точно такой же вывод , что и спецификация (кроме .. двоичных данных изображения ..), но для полноты, вот оно:
function gen_multipart(title, description, image, mimetype) {
var multipart = ['Media multipart posting', " \n", '--END_OF_PART', "\n",
'Content-Type: application/atom+xml',"\n","\n",
"<entry xmlns='http://www.w3.org/2005/Atom'>", '<title>', title, '</title>',
'<summary>', description, '</summary>',
'<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/photos/2007#photo" />',
'</entry>', "\n", '--END_OF_PART', "\n",
'Content-Type:', mimetype, "\n\n",
image, "\n", '--END_OF_PART--'];
return multipart.join("");
}
проблема в том, что полезная нагрузка POST отличается от необработанных данных изображения и, следовательно, приводит к неправильному запросу (Picasa не принимает изображение), хотя он работал нормально при использовании
xhr.send(file) // With content-type set to file.type
Мой вопрос заключается в том,как мне получить real двоичное изображение, чтобы включить его в составную часть?Я предполагаю, что это искажено, просто добавив его в строку xml, но я не могу исправить это.
Обратите внимание, что из-за старой ошибки в Picasa , base64 нерешение.