2012-10-29 34 views
6

Tôi mới đến mùa xuân. Tôi có một bộ điều khiển với một RequestMapping cho một số tham số GET. Chúng trả về một String. Nhưng một phương pháp cần trả về một tệp trong thư mục "/ res /". Làm thế nào để làm điều đó?Trả lại tệp từ Bộ điều khiển trong Mùa xuân

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

Cảm ơn

+4

Xem câu trả lời ở đây: http://stackoverflow.com/questions/5673260/downloading-a- file-from-spring-controllers –

+0

Loại tệp nào? –

Trả lời

12

Nhờ @ JAR.JAR.beans. Dưới đây là liên kết: Downloading a file from spring controllers

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

Có thể điều này sẽ giúp

@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 
    } 
} 
2

Một cách khác, mặc dù Jatin's answer là cách mát:

//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); 
    } 
} 

Lifted từ:

1

này hoạt động như một nét duyên dáng cho tôi:

@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; 
     } 
    } 
Các vấn đề liên quan