在哪里/如何在spring mvc中存储图像/文件

时间:2015-02-07 10:56:59

标签: image spring-mvc

我在Spring MVC和Hibernate的电子商务应用程序中工作,我需要存储大量图像。
我想将图像保存在文件系统上(在服务器本身上以减少数据库的负载)。我怀疑的是我应该在项目中保存图像的确切位置?

正如我在一些博客中所提到的那样,图片不应保存在war文件的文件夹中,因为它可能会在下一版本的应用程序发布时导致出现问题(备份所有图像)并再次手动放置它们。
请让我知道我需要在哪里保存图像以及如何在我们的java类中获取该文件夹路径。

2 个答案:

答案 0 :(得分:7)

您可以创建一个控制器,它将返回图像数据并将其用于显示在您的jsp上。

控制器示例:

@RequestMapping(value = "/getImage/{imageId}")
@ResponseBody
public byte[] getImage(@PathVariable long imageId, HttpServletRequest request)  {
    String rpath = request.getRealPath("/");
    rpath = rpath + "/" + imageId; // whatever path you used for storing the file
    Path path = Paths.get(rpath);
    byte[] data = Files.readAllBytes(path); 
    return data;
}

并使用以下代码显示:

<img src="/yourAppName/getImage/560705990000.png" alt="myImage"/>

HTH!

答案 1 :(得分:1)

您可以将文件存储/上传到容器中。使用request.getRealPath("/")访问路径。

示例:

                byte[] bytes = fileInput.getBytes(); 

                //bytes to string conversion
                fileToStr = new String(bytes, "UTF-8");
                System.out.println(fileToStr);                    
                String name=fileInput.getOriginalFilename(); 

                String ext=name.substring(name.lastIndexOf("."),name.length()); 
                fileName=""+System.currentTimeMillis()+ext; 


                String rpath=request.getRealPath("/"); //path forstoring the file
                System.out.println(rpath); 
                File file=new File(rpath,"csv"); 
                if(!file.exists()){ 
                                file.mkdirs(); 
                } 

                File temp=new File(file,fileName); 
                System.out.println("Path : "+temp); 

                FileOutputStream fos= new FileOutputStream(temp); 
                fos.write(bytes); 
                fos.close();