복붙노트

[SPRING] Spring의 Controller에서 파일 반환

SPRING

Spring의 Controller에서 파일 반환

나는 봄이 처음이다. 몇 가지 GET 매개 변수에 대한 RequestMapping이있는 컨트롤러가 있습니다. 그들은 문자열을 반환합니다. 하지만 한 방법은 "/ res /"폴더에있는 파일을 반환해야합니다. 어떻게해야합니까?

@RequestMapping(method = RequestMethod.GET,value = "/getfile")
public @ResponseBody 
String getReviewedFile(@RequestParam("fileName") String fileName)
{
    return //the File Content or better the file itself
}

감사

해결법

  1. ==============================

    1.@ JAR.JAR.beans에 감사드립니다. 다음은 스프링 컨트롤러에서 파일 다운로드하기입니다.

    @ JAR.JAR.beans에 감사드립니다. 다음은 스프링 컨트롤러에서 파일 다운로드하기입니다.

    @RequestMapping(value = "/files/{file_name}", method = RequestMethod.GET)
    @ResponseBody 
    public FileSystemResource getFile(@PathVariable("file_name") String fileName) {
        return new FileSystemResource(myService.getFileFor(fileName)); 
    }
    
  2. ==============================

    2.이것이 도움이 될지도 모른다.

    이것이 도움이 될지도 모른다.

    @RequestMapping(method = RequestMethod.GET,value = "/getfile")
    public @ResponseBody 
    void getReviewedFile(HttpServletRequest request, HttpServletResponse response, @RequestParam("fileName") String fileName)
    {
        //do other stuff
        byte[] file = //get your file from the location and convert it to bytes
        response.reset();
        response.setBufferSize(DEFAULT_BUFFER_SIZE);
        response.setContentType("image/png"); //or whatever file type you want to send. 
        try {
            response.getOutputStream().write(image);
        } catch (IOException e) {
            // Do something
        }
    }
    
  3. ==============================

    3.또 다른 방법은, 비록 Jatin의 답은 좀 더 시원합니다.

    또 다른 방법은, 비록 Jatin의 답은 좀 더 시원합니다.

    //Created inside the "scope" of @ComponentScan
    @Configuration
    public class AppConfig extends WebMvcConfigurerAdapter {
        @Value("${files.dir}")
        private String filesDir;
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry
                    .addResourceHandler("/files/**")
                    .addResourceLocations("file:" + filesDir);
        }
    }
    

    에서 출발 :

  4. ==============================

    4.이것은 나를 위해 매력처럼 작동합니다 :

    이것은 나를 위해 매력처럼 작동합니다 :

    @RequestMapping(value="/image/{imageId}", method = RequestMethod.GET)
        public ResponseEntity<byte[]> getImage(@PathVariable String imageId) {
            RandomAccessFile f = null;
            try {
                f = new RandomAccessFile(configs.getImagePath(imageId), "r");
                byte[] b = new byte[(int)f.length()];
                f.readFully(b);
                f.close();
                final HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.IMAGE_PNG);
                return  new ResponseEntity<byte[]>(b, headers, HttpStatus.CREATED);
            } catch (Exception e) {
                return null;
            }
        }
    
  5. from https://stackoverflow.com/questions/13119759/return-a-file-from-controller-in-spring by cc-by-sa and MIT license