14

私は春が初めてです。いくつかの GET パラメーターの RequestMapping を持つコントローラーがあります。それらは String を返します。ただし、1 つのメソッドは「/res/」フォルダー内のファイルを返す必要があります。それ、どうやったら出来るの?

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

ありがとう

4

5 に答える 5

16

@JAR.JAR.beansに感謝します。リンクは次のとおりです。SpringControllerからファイルをダウンロードする

@RequestMapping(value = "/files/{file_name}", method = RequestMethod.GET)
@ResponseBody 
public FileSystemResource getFile(@PathVariable("file_name") String fileName) {
    return new FileSystemResource(myService.getFileFor(fileName)); 
}
于 2012-10-29T10:45:56.677 に答える
7

これが役立つかもしれません

@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
    }
}
于 2012-10-29T13:43:48.343 に答える
2

別の方法ですが、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);
    }
}

から持ち上げた:

于 2016-07-21T22:05:21.850 に答える