14

我是春天的新手。我有一个带有多个 GET 参数的 RequestMapping 控制器。他们返回一个 String 。但是一种方法需要返回“/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。这是链接:从弹簧控制器下载文件

@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 回答
1

这对我来说就像一个魅力:

@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;
        }
    }
于 2017-01-03T23:04:12.197 回答
0

如果您在本地 Windows 机器上工作,这可能对您有用:

@RequestMapping(value="/getImage", method = RequestMethod.GET)
    @ResponseBody
    public FileSystemResource getUserFile(HttpServletResponse response){

        final File file = new File("D:\\image\\img1.jpg");

        response.reset();
        response.setContentType("image/jpeg");


        return new FileSystemResource(file);
    }

为了测试您的代码,您可以使用Postman “使用发送和下载而不仅仅是发送

返回字节的另一种方法

@GetMapping("/getAppImg")
    @ResponseBody
    public byte[] getImage() throws IOException {

        File serveFile = new File("image_path\\img.jpg");

        return Files.readAllBytes(serveFile.toPath());
    }
于 2019-12-02T10:25:03.917 回答