Загрузите байтовый массив как исходный файл в AngularJS с сервера

0

У меня есть следующее требование: Java-сервер отправит данные ниже, прочитав файл с сервера (это может быть pdf, doc или изображение)

Код Java:

public static byte[] downloadFileAsStream(String fileName) throws IOException, MalformedURLException 
File file = new File(fileName);
if (!file.exists()) {
  // File not found
  return null;
}

try {
  InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
  return readFileAsByte(file.getAbsolutePath());
} catch (FileNotFoundException ex) {
  ex.printStackTrace();
}
return null;
}

private static byte[] readFileAsByte(String filePath) {

try {
  Path path = Paths.get(filePath);
  return Files.readAllBytes(path);
} catch (IOException ex) {
  ex.printStackTrace();
}
return new byte[0];
}

сервер вернет файл в виде массива байтов, тогда его необходимо преобразовать в исходный файл AngularJS и загрузить

Теги:

2 ответа

1
Лучший ответ

Следующий код может использоваться для создания файла на стороне клиента на основе ответа от сервера:

$http.post("<SERVER_URL>", "<PARAMS_IF_ANY>", {
    responseType:'arraybuffer'
}).success(function(data, status, headers) {
    var contentType = headers["content-type"] || "application/octet-stream";
    var urlCreator = window.URL || window.webkitURL || window.mozURL || window.msURL;
    if (urlCreator) {
        var blob = new Blob([data], { type: contentType });
        var url = urlCreator.createObjectURL(blob);
        var a = document.createElement("a");
        document.body.appendChild(a);
        a.style = "display: none";
        a.href = url;
        a.download = "download.pdf"; //you may assign this value from header as well 
        a.click();
        window.URL.revokeObjectURL(url);
    }
}
2

Вам нужно добавить заголовок ответа на стороне сервера, как показано ниже.

 response.setHeader("Content-Type", "application/pdf");
 response.setHeader("Content-Disposition", "attachment; filename=sample.pdf");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню