Как восстановить образ с загрузкой Spring после сохранения в локальной папке - PullRequest
0 голосов
/ 03 июля 2019

Мне нужно сохранить изображение в локальную папку и загрузить его после использования Spring Boot в обоих случаях.На своей БД я сохраняю только имя файла.

Я сохраняю изображение с этим:

   @PostMapping("/saveimage")
   public ResponseEntity<Usuario> insertProduct(@RequestPart("body") String body,
            @RequestPart("imagen") MultipartFile imagen) {
        //......
    }

Но теперь мне нужно восстановить его с помощью запроса get для работы с другимиприложение.

Как я могу это восстановить?Только с URL я не могу, потому что оба приложения находятся на разных серверах, поэтому мне нужно сделать это с GetRequest.

Я пробовал это:

    @GetMapping("/getimage/{path}")
    ResponseEntity<File> imagen(@PathVariable String path) {
        File file = new File(this.uploadingDir + path);
        return new ResponseEntity<File>(file, HttpStatus.OK);   
    }

Но это не работает должным образом, я получаю полный путь, а не файл.

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

У меня тоже был похожий UseCase. Приведенный ниже код работает хорошо для меня. Я получаю имя файла из первичного ключа, связанного с файлом / изображением (ниже ZIP-файла). Поскольку у вас есть путь к Image в PathVaraiabe, вы можете изменить его в соответствии с этим. Кроме того, измените Content-Type и производите в соответствии с вашими потребностями. Возможный тип контента

@RequestMapping(value="/download/{assetId}",method=RequestMethod.GET,produces="application/zip" )
    public ResponseEntity<?> downloadAsset(@PathVariable("assetId") BigInteger assetId, HttpServletResponse response) throws IOException
    {

             String filename = assetService.downloadAssetName(assetId);
             if(filename!=null && !filename.isEmpty())
             {
                File file = new File(uploadingDir + filename); 
                InputStreamResource resource2 = new InputStreamResource(new FileInputStream(file));
                response.setContentType("application/zip");
                response.setHeader("Content-Disposition", String.format("inline; filename=\"" + filename + "\""));
                response.setHeader("responseType", "arraybuffer");
                response.setHeader("Content-Length", ""+file.length());

                return new ResponseEntity<InputStreamResource>(resource2,HttpStatus.ACCEPTED);
             }
             else
                 return new ResponseEntity<String>("message",HttpStatus.BAD_REQUEST);
    }
0 голосов
/ 03 июля 2019

Класс File содержит только информацию о пути к файлу и ничего более. Чтобы прочитать данные из него, вы должны создать поток из этого файлового объекта.

Попробуйте использовать что-то подобное.

@GetMapping("/getimage/{path}")
public void adminDownloadProductPicture(@PathVariable("path") String path,
                                        HttpServletResponse response) throws IOException {
    File file = new File(this.uploadingDir + path); // or you can use Paths.get(this.uploadingDir + path); instead
    Files.copy(file.toPath(), response.getOutputStream());
    response.setContentType("image/jpeg"); // your content type here
 }

Обратите внимание, что вы должны установить тип пантомимы (тип контента) в соответствии с вашей картинкой (image / jpeg, image / gif, image / bmp и т. Д.)

Также, пожалуйста, прочитайте эту статью для деталей и других способов https://www.baeldung.com/spring-mvc-image-media-data

...