Задать вопрос
unclechu
@unclechu

Как корректно пересылать бинарные данные через XHttpRequest в webkit?

Проблема состоит в том, что в Chromium или Opera нет метода sendAsBinary (только send) у XHR-объекта. В итоге в огнелисе всё загружается корректно, а в хромоногом и хропере приходят битые файлы, также вместо юникодных символов в имени файла — различная абракадабра.

Отрывок кода:
self._xhr.open('POST', self.params.url, true);

var boundary = 'xxxxxxxxx';
self._xhr.setRequestHeader('Content-Type', 'multipart/form-data, boundary='+boundary);
self._xhr.setRequestHeader('Cache-Control', 'no-cache');
self._xhr.setRequestHeader('Pragma', 'no-cache');
self._xhr.setRequestHeader('Expires', '0');

var body = '';

// the file
body += '--' + boundary + '\r\n';
body += 'Content-Disposition: form-data; charset: utf-8; accept-charset: utf-8'+
	'; name="'+ self.params.fileFieldName +'"'+
	'; filename="'+ unescape(encodeURIComponent( self.params.file.name )) +'"\r\n';
body += 'Content-Type: application/octet-stream\r\n\r\n';
body += self._reader.result + '\r\n'; // self._reader is instanceof FileReader

// custom data
for (var key in self._toPost) {
	body += '--' + boundary + '\r\n';
	body += 'Content-Disposition: form-data; name="'+ key +'"\r\n';
	body += 'Content-Type: text/plain; charset=utf-8\r\n\r\n';
	body += self._toPost[key].toString() + '\r\n';
}

body += '--' + boundary + '--';

if (self._xhr.sendAsBinary) {
	// firefox
	self._xhr.sendAsBinary(body);
} else {
	// chrome (W3C spec.)
	self._xhr.send(body);
}


Как в такой ситуации действовать? Спасибо.
  • Вопрос задан
  • 2872 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
unclechu
@unclechu Автор вопроса
Нашёл решение альтернативной реализации sendAsBinary.
https://code.google.com/p/chromium/issues/detail?i...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Комментировать
Заголовок задан? Есть на PHP такая строка header("Content-type: text/html; charset=utf-8");
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы