java数据库保存文件路径注意事项
问题记录–Java上传或下载文件路径存储数据库注意事项–2020年04月09日
数据库中存储全路径易造成读取文件为空
我们使用java下载或上传文件,文件路径一般都是保存在数据库中,如在数据库中建一张和此文件相关的表,其中包含文件路径字段。
我们上传或下载文件的时候一般都是使用绝对路径,如: D:/files/img1.png
,而且我们在数据库中也直接把这整个绝对路径存储在里面了。
这就可能导致文件读取是因路径问题导致读取出来的文件为空(文件不存在)。
特别是磁盘挂载后,很容易造成读取、下载出来的文件内容是空的。
注:磁盘挂载
原因
当我们上传和下载的方法不在同一个服务器上的时候,我们上传的路径可能是 D:/files/Apk/线上4_8.apk ,并且保存在数据库中:
我们下载时读取的是数据库中的绝对路径,从数据库中得到了文件所在路径为D:/files/Apk/线上4_8.apk ,但是下载接口在另外一台服务器上,我们采用了磁盘挂载后,在下载接口所在服务器访问上传的文件所在的路径为Z:/Apk/线上4_8.apk,
当我们下载时,下载接口读取的路劲为D:/files/Apk/线上4_8.apk ,实际需要为Z:/Apk/线上4_8.apk,所以造成了下载的文件为空。
解决方案
-
改数据库存储:
数据库中存放的文件路径为文件名称,或者文件夹+/+文件名称
-
改java后台路径获取代码
我们将绝对路径的盘符放在配置文件中,当我们读取、上传、下载的时候从配置文件中获取盘符,将盘符和文件名一起组成绝对路径。
如:配置文件添加属性 uploadApk
修改前上传保存数据库java代码:
修改后上传保存数据库java代码:
修改前下载java代码:
修改后下载java代码:
这样我们读取、下载时获取的路径就是Z:/Apk/线上4_8.apk
-
配置文件修改
我们在部署项目的时候,只需要将上传文件项目部署时将配置文件修改为
下载文件项目部署时修改配置文件修改为
-
成功获取正确的文件!