遇到问题介绍:项目中文件上传,上传文件到服务器以后,如果使用tomcat下的目录作为上传文件的路径,则每次重启服务器文件将消失;
解决办法:首先想到的是存储到磁盘下面(例如:/Users/apple/Desktop目录下),这样即使服务器重新部署,文件也依然在磁盘上没有丢失;
1.首先在src目录下新建一个属性文件storage_directory.properties,方便与后期部署修改存储文件的路径,不需要在代码中修改,
文件中存储文件的绝对路径
#file storage directory
storage_directory=/Users/apple/Desktop
2.定义读取属性文件类,可以需要的时候读取也可以系统启动时在初始化类中加载出来绝对路径然后放到静态变量中存储,以便减少文件读取
3.存储时-获取服务器磁盘的绝对路径,web系统接收回来以后获取绝对路径通过fileOutputStream输出流存取文件,同时检测磁盘绝对目录是否存在,不存在则创建出来,然后写文件
// 获取服务器的绝对路径(真实路径)
public static String getServerPath(HttpServletRequest request, String filePath) {
return PropertiesUtils.getValue(PropertiesUtils.FileStorageDir, PropertiesUtils.FileStorageDirKey)+filePath;
}
//从响应头中读取文件写入磁盘
4.读取时-传过来文件存储的相对目录,获取文件绝路路径(磁盘目录+文件目录)通过BufferedInputStream
读取文件写入响应头即可(备注:因为需要读取文件以后再header添加相应处理,所以未采用虚拟目录读取的方式)
// 获取服务器的真实路径
String realPath = PropertiesUtils.getValue(PropertiesUtils.FileStorageDir, PropertiesUtils.FileStorageDirKey)+filePath;
//读取文件
//写入响应头response