С сервлета на клиент необходимо отправить торрент-файл. В JS не силён. По примерам в интернете скопипастил такой код.
function downloadFile() {
var data;
var xmlHttp = getXHR();
var date = new Date();
date = Date.parse(date);
xmlHttp.open("GET", "/index?request=dld&sessid=" + date, false);
xmlHttp.onreadystatechange = function() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
data = this.response;
saveData(data, fileName); //код получения fileName опускаю
}
}
};
xmlHttp.send(null);
}
function getXHR() {
var xmlHttp;
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")
} catch (E) {
xmlHttp = false;
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
return xmlHttp;
}
var saveData = (function () {
debugger;
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
return function (data, fileName) {
var blob = new Blob([data], {type: "octet/stream"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
};
}());
код сервлета:
String path = "--any path--";
OutputStream outputStream = response.getOutputStream();
FileInputStream inputStream = new FileInputStream(path);
while(inputStream.available() > 0){
outputStream.write(inputStream.read());
}
inputStream.close();
outputStream.close();
Файл сохраняется ломаный. Если просто открыть в текстовом или hex редакторе, то начало файла, где перечисляются трекеры, сходится с исходным, а дальше, где бинарная информация, идет явное отличие.
Решено
Несмотря на то, что минусуют, я всё же отвечу. Вдруг, кому поможет. Для объекта XMLHttpRequest необходимо указать тип принимаемых данных. В моём случае
xmlHttp.responseType = "arraybuffer";
Данная настройка работает только с асинхронным запросом. По умолчанию xmlHttp.responseType = "" (DOMString), что и приводит к изменению данных.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Мне нужно изменить обе строки в html, но с помощью innerHTML получается изменить лишь одну строку (ту, где единица написана)