Как преобразовать CoyoteInputStream в FileInputStream?

Я отправляю из внешнего интерфейса в 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); Но он использовался в других местах, лучше добавить в моем случае другой новый парсинг?

Почему это должен быть FileInputStream? Разве любой код, использующий поток, не должен ожидать наличия InputStream?

Andreas 18.06.2018 19:51

@Andreas У меня есть кое-что из бэкэнда, отредактированное описание.

Roberto 18.06.2018 19:57

Означает ли наследие неизменяемым? Разве вы не можете изменить этот код с использования FileInputStream на использование InputStream? Это должно быть так же просто, как изменение типа параметра, и должно быть полностью обратно совместимо с существующими вызовами метода.

Andreas 18.06.2018 20:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
582
1

Ответы 1

Это не может быть FileInputStream, поскольку данные не находятся в файле на диске.

Если вам требуется, чтобы он был на диске, вам нужно будет скопировать данные с CoyoteInputStream на диск, а затем передать FileInputStream в код, который в нем нуждается.

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

Другие вопросы по теме