我正在开发图片上传系统。文件成功上载到目录中并插入数据库(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上传和检索文件的最佳方法是什么?
提前谢谢。
答案 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}">