2012-10-29 16 views
6

Sono nuovo alla primavera. Ho un controller con un RequestMapping per diversi parametri GET. Restituiscono una stringa. Ma un metodo deve restituire un file nella cartella "/ res /". Come lo faccio?Restituire un file dal controller in primavera

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

Grazie

+4

veda la risposta qui: http://stackoverflow.com/questions/5673260/downloading-a- file-from-spring-controller –

+0

Quale tipo di file è? –

risposta

12

Grazie a @ JAR.JAR.beans. Ecco il link: 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

Può essere che questo vi aiuterà

@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

Un altro modo, anche se Jatin's answer è il modo più fresco:

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

sollevato da:

1

Questo funziona come un fascino per me:

@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; 
     } 
    } 
Problemi correlati