Я отправляю из внешнего интерфейса в js файл * .xls на бэкэнд с помощью fetch:
const invokeImportPaymentsUpload = file => fetch("/rest/import", {
method: "POST",
credentials: "same-origin",
body: file,
});
У меня есть службы отдыха на java + spring, поэтому я ожидал получить FileInputStream и файл синтаксического анализа, но с помощью request.getInputStream () получил CoyoteInputStream.
@RequestMapping(value = {"/import"}, method = RequestMethod.POST)
public Map<String, List<Payment>> importPayments(HttpServletRequest request, HttpServletResponse response) throws IOException {
ImportOutcome outcome = myService.import(request.getInputStream());
...
Как заставить из CoyoteInputStream -> FileInputStream читать и разбирать?
У меня есть наследие на бэкэнде, анализируя FileInputSrtream следующим образом byte [] bytes = IOUtils.toByteArray (fileInputStream); Но он использовался в других местах, лучше добавить в моем случае другой новый парсинг?
@Andreas У меня есть кое-что из бэкэнда, отредактированное описание.
Означает ли наследие неизменяемым? Разве вы не можете изменить этот код с использования FileInputStream на использование InputStream? Это должно быть так же просто, как изменение типа параметра, и должно быть полностью обратно совместимо с существующими вызовами метода.




Это не может быть FileInputStream, поскольку данные не находятся в файле на диске.
Если вам требуется, чтобы он был на диске, вам нужно будет скопировать данные с CoyoteInputStream на диск, а затем передать FileInputStream в код, который в нем нуждается.
тем не мение, обратите внимание, что для IOUtils.toByteArray() нужен только InputStream, а не FileInputStream. Если код, в котором существует вызов toByteArray(), в настоящее время написан так, чтобы требовать FileInputStream, то это неверный код, и его необходимо изменить для работы с InputStream, и в этом случае ваши проблемы исчезнут.
Почему это должен быть
FileInputStream? Разве любой код, использующий поток, не должен ожидать наличияInputStream?