Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

183
Views
¿Cómo habilitar Spring Reactive Web MVC para manejar archivos de varias partes?

Estoy tratando de usar la nueva implementación reactiva web-mvc en una aplicación spring boot 2.0. Estoy tratando de definir un método que consuma un archivo de varias partes pero no logre que funcione :( - Siempre recibo un error 415.

Por un lado, tengo un controlador que contiene el siguiente mapeo de solicitudes:

 @RequestMapping(method = RequestMethod.POST, path = "/myPath/{param}/{param2}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @ResponseBody public Mono<Void> postFile( @RequestBody MultipartFile data, @PathVariable("param") String param, @PathVariable("param2") String param2, @RequestHeader(name = HEADER_DATE, required = false) @DateTimeFormat(pattern = DATE_FORMAT) Instant instant ){ return fileService.handleData(Mono.just(data), param, param2, instant); }

Por otro lado, tuve que agregar un servidor en la parte superior de las dependencias básicas, ya que parece que Netty no maneja archivos de varias partes. Así que agregué la dependencia spring-boot-starter-tomcat que permitió que MultipartAutoConfiguration coincidiera y se cumpliera en la configuración automática de la aplicación.

Al publicar algo usando una llamada curl: curl 'Meta-Date: 20170101104532' --form "file=@file.bin" http://localhost:8082/myPath/foo/bar mientras los registros de depuración están activados ( logging.level.org.springframework.web=DEBUG ) Recibí esta excepción: org.springframework.web.server.UnsupportedMediaTypeStatusException: Request failure [status: 415, reason: "Content type 'multipart/form-data;boundary=------------------------58fa43b8f1a26de4' not supported"]

Este error lo RequestBodyArgumentResolver que tiene los siguientes tipos de medios admitidos: [*/*, text/xml, application/*+json;charset=UTF-8, application/xml, text/plain;charset=UTF-8, application/x-www-form-urlencoded, application/json;charset=UTF-8] proporcionado por 9 DecoderHttpMessageReader .

Antes de publicar también eché un vistazo a:

  • Spring MultiPart MediaType Unsupported que parece no ser relevante aquí ya que mi informe de autoconf contiene la siguiente entrada: MultipartAutoConfiguration#multipartResolver matched
  • establezca el tipo de contenido en utf-8 con angularjs $ http Agregar una configuración de encabezado Content-Transfer-Encoding: binary no cambió nada.

Según tengo entendido, Spring web 5.0 usa un nuevo sistema de decodificador de solicitudes, ya que no encuentro estas clases en una aplicación de arranque Spring 4, y todavía no hay ningún DecoderHttpMessageReader que se ocupe de un archivo de varias partes. ¿Me perdí algo? ¿O debo esperar a que se implemente uno?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

De acuerdo, parece que esto simplemente no está implementado por ahora, ya que actualmente existe una solicitud de extracción para esta función: Agregar soporte de solicitud multiparte reactiva # 1201

Debería haber comprobado esto antes...

[EDITAR]: el problema se resolvió y se fusionó con la rama principal de Spring. Ya no debería ser un problema.

over 4 years ago · Santiago Trujillo Report

0

@PutMapping(value="/{..}",consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public Mono<Void> save(@RequestPart("file") FilePart multipartFormData,@RequestParam("fileName") String fileName,@PathVariable("..") String ..) throws IOException { List<ByteBuffer> bytesList = new LinkedList<>(); multipartFormData.content(). subscribe(item->bytesList.add(item.asByteBuffer())); int totalBytes = bytesList.stream().mapToInt(item->item.capacity()).sum(); ByteBuffer buffer = ByteBuffer.allocate(totalBytes); bytesList.stream().forEach(byteBuff->buffer.put(byteBuff)); baseImageHandler.saveImage(buffer, fileName, baseItemId); return Mono.empty(); }

Tenga en cuenta que es una versión de desarrollo, pero así es como me las arreglé para hacerlo.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!