额,首先,我们这个项目没用oss,所以类似用户头像啥的都是存在服务器的指定位置的。
然后前端传送的是base64的编码。这里实现的几乎就是一个解码的功能,然后写到指定位置而已。比较简单,但是因为以前一直用oss,所以这个功能还是第一次写,所以记录一下。
首先这个位置是用配置文件的形式记录的。如下:
serverfile:
files: D:\Program Files (x86)\nginx-1.16.0\imgs\
appfiles: D:\Program Files (x86)\nginx-1.16.0\app\
如上是对存储路径的一个全局定义。
然后就是工具类(一个是解码,一个是存储到指定位置):
public class Base64ImgThread extends Thread {
//图片的base64编码
private String imgStr;
//文件存储的路径
private String path;
//要存的文件名
private String fileName;
public Base64ImgThread(String imgStr,String path,Long userId,String fileName){
this.imgStr = imgStr;
this.path = path+"/"+userId;
this.fileName = fileName;
}
public Base64ImgThread(String imgStr,String path,String fileName){
this.imgStr = imgStr;
this.path = path;
this.fileName = fileName;
}
@Override
public void run() {
FileOutputStream fos = null;
try {
File f = new File(path);
if(!f.exists()){
f.mkdirs();
}
f = new File(path+"/"+fileName);
fos = new FileOutputStream(f);
//只支持png和jpeg
if (imgStr.contains("data:image/png;base64")){
imgStr = imgStr.substring(22);
}
if (imgStr.contains("data:image/jpeg;base64")){
imgStr = imgStr.substring(23);
}
byte[] bs = Base64.decode(imgStr);
fos.write(bs,0,bs.length);
fos.flush();
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
fos.close();
} catch (IOException e)