欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java实现图片上传

程序员文章站 2022-07-10 20:29:53
...

技术选型

技术选型:
SpringBoot
Vue

技术方案:
采用数据库存储图片的方式,后端接口返回图片的base64流,插入数据库前对图片进行加密,接口查询进行解密。

实现

数据库

字段:head_portrait  
类型:longblob

实体类属性设置

 /**
  * 头像路径
 */
@TableField("head_portrait")
@Lob
private byte[] headPortrait;

业务类处理

import sun.misc.BASE64Decoder;
import org.apache.commons.codec.binary.Base64;

@Override
public Result selectHeadPortraitById(String id) {
    try {
        Result result = new Result();
        SysUser sysUser = super.getById(id);
        //Base64解密图片
        byte[] bytes = new BASE64Decoder().decodeBuffer(new String(sysUser.getHeadPortrait()));
        //Base64解析图片流并返回字符串
        String baseString = Base64.encodeBase64String(bytes);
        result.setBody(baseString);
        return result;
    } catch (IOException e) {
   	 	throw new Result(e.getMessage(), e.getMessage(), e.getMessage());
    }
}
baseString:解密后的图片base64流

扩展:

图片加密

   /**
    * 对SysUser对象的头像属性进行加密处理
    *
    * @param sysUser
    */
    private void dealWithHeadPortrait(SysUser sysUser) {
        //对图片src转换成字节
        byte[] bytes = ImgUtils.dealImgOfByte(sysUser.getHeadPortraitSrc());
        sysUser.setHeadPortrait(bytes);
    }

图片工具类(ImgUtils)

import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Encoder;

/**
 * 工具类:图片
 */
public class ImgUtils {

    /**
     * 功能:对图片进行转换流,并进行加密
     * @param src 图片的src
     * @return
     */
    public static byte[] dealImgOfByte(String src){
        String str = "data:image/png;base64,";
        String replaceStr = src.toString().replace(str, "");
        //将字符串转换为图片流
        byte[] bytes = Base64.decodeBase64(replaceStr);
        //将图片流Base64加密
        String img = new BASE64Encoder().encode(bytes);
        return img.getBytes();
    }

}

Vue前端

按钮

<el-form-item  prop="headPortrait">
<img  :src="form.headPortrait" style="height:120px;width:120px;border-radius:50%;"/>
</el-form-item>


事件

//显示头像
showImg() {
    var id = sessionStorage.getItem("userId"); 
    this.$http.post(this.api.userQueryHeadPortraitById+id).then(res => {
    if (res.data.code == "200") {
        this.form.headPortrait = "data:image/png;base64,"+res.data.body;
     }
  });
}
相关标签: 图片上传