java项目中上传的图片存放在部署的linux服务器目录下

为什么项目里上传的图片要存放在所部署的linux服务器目录下,而不是直接放在java项目里的静态目录下(webapp)?

因为当项目运行时把图片上传到java项目中静态目录下时,上传文件存储在了项目的target目录下,当项目下次重新部署时,需要把target目录下的上传的文件拷贝出来,重新加到项目里,这样就比较麻烦,万一把tomcat中webapps下的项目文件夹删除了,之前项目中上传的图片就丢了。

上传图片放在linux服务器目录下的好处

项目重新部署时,不需要向之前一样把target目录下的图片文件夹拷贝出来,而是直接部署即可,因为图片上传在了项目所部署的linux服务器目录下。

线上linux服务器tomcat配置具体步骤:

1.在tomcat的<Host>标签下配置

<Context path="/static" docBase="/home/application" reloadable="false"></Context>

2.在java项目properties配置文件中文件上传路径为 signatureDir =  /home/application,可以通过java代码在上传路径后面再拼接文件夹。

3.数据库中存放的是相对路径/static/2021/01/123.png,以tomcat中server.xml中配置的<Context>标签下的path="/static"开头(其中2021 01 都是文件夹)

4.前端读取图片时img的src="/static/2021/01/123.png"(其中2021 01 都是文件夹)

说明:图片路径映射方式是-> ip:8080/static会找到linux服务器下的文件夹/home/application,然后再找到/home/application下的两个文件夹2021和01,最后找到图片123.png。


本地测试时,tomcat配置的<Context>标签如下:

<Context path="/static" docBase="D:\develop" reloadable="false"></Context> 

本地测试时java项目properties配置文件中文件上传路径为 signatureDir =  D:\\develop

其他都相同,部分java代码仅供理解上文(*-*)

byte[] resultBytes = Base64.decode(base64);
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
String format = sdf.format(date);
String[] splits = format.split("-");
//获取图片存储路径
String userfilesBaseDir = signatureDir;
//根据年、月新建yyyy文件夹,MM文件夹
//获取UUID,做图片名称
String UUID = IdGen.uuid();
//绝对路径,通过文件流生成图片
String absPath=userfilesBaseDir+"/"+splits[0]+"/"+splits[1];
String picFilePath =absPath+"/"+ UUID+".png";
//相对路径,存入数据库
String relaPath="/static/"+splits[0]+"/"+splits[1]+"/"+UUID+".png";
File filePath =new File(absPath);
boolean flag=true;
//文件夹不存在,则创建
if(!filePath.exists()){
    flag =filePath.mkdirs();
}
//文件夹创建失败则抛出异常
if(!flag){
    throw new RuntimeException("***");
}
try {
     FileOutputStream out = new FileOutputStream(picFilePath);
     out.write(resultBytes);
     out.close();
}catch (IOException e) {
      e.printStackTrace();
}

参考文章:1.tomcat搭建图片服务器

                  2.base64编码的图片如何存入数据库

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值