Я пытаюсь открыть файл PDF на следующей вкладке, он открывается, но всегда пустой. Я вызываю файл PDF из папки в моем Springboot. Данные отображаются в журнале консоли.
Весенний код:
@RequestMapping(value = "/report", method = RequestMethod.GET)
void getFile(HttpServletResponse response) throws IOException {
String fileName = "test123.pdf";
String path = "TrainingDocuments/SuperPartnerUser/" + fileName;
File file = new File(path);
FileInputStream inputStream = new FileInputStream(file);
response.setContentType("application/pdf");
response.setContentLength((int) file.length());
response.setHeader("Content-Disposition", "inline;filename=\"" + fileName + "\"");
FileCopyUtils.copy(inputStream, response.getOutputStream());
}
Код реакции:
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:application/pdf;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('target','_blank');
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
function test () {
Api(`tempFileDownload/report`, 'Get',"",3).then((data) => {
console.info(data);
download("test",data)
const file = new Blob([ data ], { type: 'application/pdf' });
//Build a URL from the file
const fileURL = URL.createObjectURL(file);
//Open the URL on new Window
window.open(fileURL);
});
}
@MujeebQureshi не верит, что это так?
да, потому что вы отправляете двоичные данные со своего сервера, которые вы, кажется, размещаете внутри объекта Blob на своем внешнем интерфейсе. Вы пробовали вести консольный журнал fileURL сразу после const fileURL = URL.createObjectURL(file);
@MujeebQureshi, когда я регистрирую в консоли URL-адрес файла, я получаю размер и тип BLOB-объекта
@MujeebQureshi это правильно?
Я считаю, что проблема в том, что это должна быть строка URL вместо объекта.
@MujeebQureshi, можете ли вы порекомендовать решение проблемы, для меня все выглядит хорошо>
Возможно ли вернуть строку base64 отчета в формате pdf вместо двоичного? Все станет очень легко, если вы справитесь с этим. Если ваш сервер написан на dotNet, есть простая утилита, которая может это сделать.





Проблема заключалась в вызове API для внешнего интерфейса, бэкэнд работает нормально; Тип ответа должен быть большим двоичным объектом.
const result = await axios({
url: `${localUrl + url}`, //your url
method: 'GET',
responseType: 'blob', // important
})
.then(({ data }) => data);
return result;
данные, которые вы получаете от API base64?