Spring MVC:在JSP中检索上传的文件

时间:2017-09-02 17:45:17

标签: java spring jsp

我正在开发图片上传系统。文件成功上载到目录中并插入数据库(MySQL)。但主要问题是如何从目录中检索它们,在<img>中的JSP中显示它们,并且可能最重要的问题是保存上传文件的位置?

我的项目结构如下:

ProjectName
Java Resources
    - src/main/java
        - com.project.config
        - com.project.controller
        - com.project.model
    - src/main/resources
        - messages.properties

src
    - java
    - resources
    - webapp
        - WEB-INF
            - resources
                - css
                - js
                - icons
                - images (where I store the uploaded images)
        - views

静态文件的Java配置设置(css,js等)

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/");
}

现在,当我的文件在我的项目目录中时,它运行良好,但在我可以在JSP中检索它之前,我必须在eclipse中清理我的项目。

BUT:

我从其他帖子中了解到,我不能将上传的文件存储在我的项目目录中,因为每次重新部署项目时,所有文件都将被删除(删除)。我必须将它们存储在外部和HTTP可访问文件夹中,并将addResourceHandler设置更改为新目录。

但是以这种方式思考那么我的CSS,JS,图标,图片(用于CSS)文件应该存储在哪里,我应该将它们存储在我存储上传图像的同一文件夹中,还是应该保留在我的项目中夹?但是,如果文件应该是不同的目录,那么addResourceHandler设置应该如何?

使用Spring MVC上传和检索文件的最佳方法是什么?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

这取决于您的系统规格。如果有很多更新文件,那么最好将URL存储在数据库中,将文件存储在服务器上的某个目录中。有关详细信息,请参阅此问题:https://habiletechnologies.com/blog/better-saving-files-database-file-system/

现在回答我们如何在jsp中展示它们。你可以试试这段代码:

1)在服务器端:

@RequestMapping(value = "/getImage/{imagePath}")
    @ResponseBody
    public byte[] getImage(@PathVariable String imagePath, HttpServletRequest request) throws IOException {

        String rpath = "yourFileStoringDirectoryURL" + imagePath + ".jpg";
        Path path = Paths.get(rpath);
        byte[] data = Files.readAllBytes(path);
        return data;
}

2)在客户端:

 <img src="${pageContext.request.contextPath}/getImage/${urlToPicture}">