#spring #mongodb #spring-boot #microservices #spring-cloud-gateway
Вопрос:
как отобразить изображение, сохраненное в mongodb с помощью springboot и spring gateway, в качестве ссылки для использования во внешнем интерфейсе. Я могу удалить изображение, но мне нужно получить ссылку для использования изображения в приложении
Мой файл сохраняется вот так:
Это мой метод для сохранения изображения:
@PostMapping("/proyectos/photos/upload/{nombre}") public void formUpload(@PathVariable("nombre") String nombre, @RequestParam("file") MultipartFile file) { try { if (file != null amp;amp; !file.isEmpty()) { String fileMd5 = SecureUtil.md5(file.getInputStream()); pService.savePhoto(nombre, fileMd5, file); } else { } } catch (IOException ex) { ex.printStackTrace(); } } // In ProyectoService, the method @Override public void savePhoto(String nombre, String fileMd5, MultipartFile file) { ProyectosPhotos ph = new ProyectosPhotos(); ph.setNombre(nombre); ph.setName(file.getOriginalFilename()); ph.setSize(file.getSize()); ph.setContentType(file.getContentType()); ph.setCreatedtime(new Date()); ph.setMd5(fileMd5); String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); ph.setSuffix(suffix); phRepository.save(ph); }
Я попытался создать ссылку для изображения, как это:
@GetMapping("/proyectos/photos/view/{nombre}") public ResponseEntitylt;?gt; fileOnline(@PathVariable("nombre") String nombre) { try { ProyectosPhotos file = phRepository.findByNombre(nombre); return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, "fileName=" file.getName()) .header(HttpHeaders.CONTENT_TYPE, file.getContentType()) .header(HttpHeaders.CONTENT_LENGTH, file.getSize() "").header("Connection", "close") .body(file.getContent()); } catch (Exception e) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body("File was not found"); } }
Но я получил ошибку в шлюзе:
2021-12-06 23:34:16.316 ERROR 16568 --- [ctor-http-nio-2] a.w.r.e.AbstractErrorWebExceptionHandler : [1c38fdea-8] 500 Server Error for HTTP GET "/api/proyectos/proyectos/photos/view/Pepe" reactor.netty.http.client.PrematureCloseException: Connection prematurely closed DURING response Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: Error has been observed at the following site(s): *__checkpoint ⇢ com.gateway.security.JwtAuthenticationFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.authorization.AuthorizationWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.authentication.logout.LogoutWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ com.gateway.security.JwtAuthenticationFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.context.ReactorContextWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.header.HttpHeaderWriterWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.config.web.server.ServerHttpSecurity$ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain] *__checkpoint ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain] *__checkpoint ⇢ HTTP GET "/api/proyectos/proyectos/photos/view/Pepe" [ExceptionHandlingWebHandler] Stack trace:
Somebody have any idea how to generate a preview for image?