Вам необходимо сохранить responseText
в промежуточной переменной перед повторным использованием объекта req
.
// download the file first
var req = new XMLHttpRequest();
req.open('GET', url, false);
req.overrideMimeType('text/plain; charset=x-user-defined');
req.send(null);
if (req.status != 200) return '';
var response = req.responseText;
// upload the file
req.open("POST", "http://mysite.com/upload", false);
req.setRequestHeader("Content-Length", response.length);
req.sendAsBinary(response);
if (req.status != 200) return '';
return req.responseText;
Обновление
В соответствии сСтраница MDN Используя XMLHttpRequest , похоже, что приведенный выше код не будет работать.Ниже приведен правильный способ получения двоичного ответа.В конце концов, у вас будет массив целых чисел без знака, которые вы можете отправить обратно на сервер и преобразовать в двоичный файл.Я думаю.
//req.responseType is only defined for FF6+
req.responseType = "arraybuffer";
req.send(null);
//req.response is for FF6+, req.mozResponseArrayBuffer is for FF < 6
var buffer = req.mozResponseArrayBuffer || req.response;
if (buffer) {
var byteArray = new Uint8Array(buffer);
}
Обновление 2
Чтобы отправить byteArray
на сервер, я бы попробовал что-то вроде следующего непроверенного, почти гарантированногоне работает код.
req.open("POST", "http://mysite.com/upload", false);
req.setRequestHeader("Content-Length", byteArray.length);
//if this doesn't work, try byteArray.buffer
//if byteArray.buffer works, try skipping 'var byteArray = new Uint8Array(buffer);' altogether and just sending the buffer directly
req.send(byteArray);
Обновление 3
Может Использование XMLHttpRequest из модулей JavaScript / компонентов XPCOM есть что-то сделатьс вашей проблемой?