第一步创建WEBP存在数据库的信息实体类
package com.cn.data.entity.register;
/**
* @author huangqiming
* B端用户会员扩展信息
* 设计表结构时,字符串属性默认为空字符串。
* 通过code与商户关联
*/
import com.cn.data.base.*;
import javax.persistence.*;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@Entity
@Table(name = "BusinessExtend",indexes={@Index(name="be_code_index",columnList="code")})
@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL,region="distribution")
public class BusinessExtend extends BasePageEntity {
private String jpgpath=""; // JPG的图片路径
private String jpgobjectKey=""; // 记录图片在BOS里的objectKey
private String webppath=""; // webp的图片路径
private String webpobjectKey=""; // 记录图片在BOS里的objectKey
private String md5hashValue=""; // 图片的哈希值的MD5压缩值,可用这个值判断图片是否重复
public BusinessExtend() {
super();
}
public String getJpgpath() {
return jpgpath;
}
public void setJpgpath(String jpgpath) {
this.jpgpath = jpgpath;
}
public String getJpgobjectKey() {
return jpgobjectKey;
}
public void setJpgobjectKey(String jpgobjectKey) {
this.jpgobjectKey = jpgobjectKey;
}
public String getWebppath() {
return webppath;
}
public void setWebppath(String webppath) {
this.webppath = webppath;
}
public String getWebpobjectKey() {
return webpobjectKey;
}
public void setWebpobjectKey(String webpobjectKey) {
this.webpobjectKey = webpobjectKey;
}
public String getMd5hashValue() {
return md5hashValue;
}
public void setMd5hashValue(String md5hashValue) {
this.md5hashValue = md5hashValue;
}
}
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
第二步,调用方法将传入的文件由JPG转为WEBP同时存入BOS服务器,返回过来的参数转为MAP集合,用作实体类信息
@RequestMapping(value = "/insertBusinessRegister",method = RequestMethod.POST)
public CommonPackMap insertBusinessRegister(MultipartFile avatar_file,Businessregister businessregister) throws Exception {
Map<String, String> stringStringMap = this.saveAttachFile(avatar_file);
return businessdetailsFace.insertbusinessregister(businessregister,stringStringMap);
}
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
第三步,写文件由JPG转为WEBP,同时存入BOS服务器的方法
package com.cn.controller;
/**
* @author huangqiming
* @所有控制层的父类:公共方法可放在此类中
* @增加BOS图片操作功能
*/
import java.io.*;
import java.util.*;
import com.cn.tools.*;
import com.cn.util.*;
import javax.imageio.*;
import org.springframework.web.multipart.*;
public class ParentBosController extends ParentController {
public ParentBosController() {
super();
}
/**
* 图片上传到BOS,返回webp和jpg两种图片的路径、图片的哈希值的MD5压缩值:md5hashValue
* sRand:验证码的值
* jpg:验证码的图片路径
*/
protected Map<String,String> createVerifiCode() throws Exception {
String sRand = ""; // 验证码值
String bucketName="verificode"; // BOS验证码图片存储Bucket名称
Map<String,String> map=new HashMap<>();
String rootPath=getRootPath();
String filename=UUID.randomUUID() +".jpg";
rootPath=rootPath+filename;
sRand=VerifiCodeTool.createVerifiCode(rootPath);
map.put("sRand",sRand);
BosClientTool.getBosClientTool().putObject(bucketName,filename,rootPath); // 把对象存储在BOS
map.put("jpg",BosClientTool.getBosClientTool().generateBosdUrl(bucketName,filename)); // 获取路径
File file=new File(rootPath);
file.delete(); // 删除临时文件
return map;
}
/**
* 获取运行环境的bucketName
*/
private String getBucketName() throws Exception {
String bucketName=null;
String activeProfile=SpringContextUtil.getActiveProfile();
switch(activeProfile) { // 根据运行的平台,获取文件存储的路径和BOS的bucketName。
case "dev" :
bucketName=BlockAttribute.devbucketName;
break;
case "test" :
bucketName=BlockAttribute.devbucketName;
break;
case "prod" :
bucketName=BlockAttribute.prodbucketName;
break;
}
return bucketName;
}
/**
* 获取运行环境的rootPath
*/
private String getRootPath() throws Exception {
String rootPath=null;
String activeProfile=SpringContextUtil.getActiveProfile();
switch(activeProfile) { // 根据运行的平台,获取文件存储的路径和BOS的bucketName。
case "dev" :
rootPath= BlockAttribute.devfilepath;
break;
case "test" :
rootPath= BlockAttribute.testfilepath;
break;
case "prod" :
rootPath=BlockAttribute.prodfilepath;
break;
}
return rootPath;
}
/**
* 图片上传到BOS,返回webp和jpg两种图片的路径、图片的哈希值的MD5压缩值:md5hashValue
*/
protected Map<String,String> saveAttachFile(MultipartFile file) throws Exception {
Map<String,String> map=new HashMap<>();
String rootPath=getRootPath();
String bucketName=getBucketName();
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
String filename = UUID.randomUUID() + suffix;
rootPath=rootPath+filename;
File serverFile = new File(rootPath);
file.transferTo(serverFile);
BosClientTool.getBosClientTool().putObject(bucketName,filename,rootPath); // 把对象存储在BOS
map.put("jpgobjectKey",filename);
map.put("jpg",BosClientTool.getBosClientTool().generateBosdUrl(bucketName,filename)); // 获取路径
File webFile=ImageConverterWebp.toWebpFile(rootPath);
filename=filename+".webp";
BosClientTool.getBosClientTool().putObject(bucketName,filename,webFile.getPath()); // 把对象存储在BOS
map.put("webpobjectKey",filename);
map.put("webp",BosClientTool.getBosClientTool().generateBosdUrl(bucketName,filename)); // 获取路径
FingerPrint fp1 = new FingerPrint(ImageIO.read(new File(rootPath)));
map.put("md5hashValue",MD5Encode.md5Encode(fp1.toString(true)));
webFile.delete(); // 删除临时文件
serverFile.delete(); // 删除临时文件
return map;
}
/**
* 删除BOS上的图片
* objectKey:保存在图片表的objectKey值
*/
protected void delAttachFile(String objectKey) throws Exception {
String bucketName=getBucketName();
BosClientTool.getBosClientTool().deleteObject(bucketName,objectKey);
}
}
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
第四步,将传进来的Map参数传入到方法中然后set注入成完整的实体类,然后通过Hibrnate直接传如数据库
@CacheEvict(value = "bregistercache",allEntries=true)
public CommonPackMap insertbusinessregister(Businessregister businessregister,Map<String, String> HashMap) throws Exception {
if (businessregister.getOperatorid()!=null&&businessregister.isFrozen()==false){
Businessregister businessregister1 = this.dao.unique("select mv from Businessregister mv where mv.id='" + businessregister.getId() + "'", Businessregister.class);
if (businessregister1 == null){
businessregister = this.createBusinessregister(null, businessregister);
BusinessExtend businessExtend = this.createbusinessExtend(HashMap,businessregister.getCode(),null);
this.dao.save(businessExtend);
this.dao.save(businessregister);
HashMap<String, String> data = new HashMap<>();
data.put("message", "save success");
return this.returnCommonPackMap("", data);
} else {
throw this.createLzhException(ExceptionCode.error10017);
}
}
else {
throw this.createLzhException(ExceptionCode.error10008);
}
}
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
第5步,传入参数Map封装WEBP实体类的方法
private BusinessExtend createbusinessExtend(Map<String,String> hashMap,String code,BusinessExtend unique){
BusinessExtend businessExtend = new BusinessExtend();
businessExtend.setWebppath(hashMap.get("webp"));
businessExtend.setWebpobjectKey(hashMap.get("webpobjectKey"));
businessExtend.setJpgpath(hashMap.get("jpg"));
businessExtend.setJpgobjectKey(hashMap.get("jpgobjectKey"));
businessExtend.setMd5hashValue(hashMap.get("md5hashValue"));
businessExtend.setCode(code);
if (unique!=null) {
unique.setWebppath(businessExtend.getWebppath());
unique.setMd5hashValue(businessExtend.getMd5hashValue());
unique.setWebpobjectKey(businessExtend.getWebpobjectKey());
unique.setJpgobjectKey(businessExtend.getJpgobjectKey());
unique.setJpgpath(businessExtend.getJpgpath());
unique.setUpdatedate(new Date());
return unique;
}else {
return businessExtend;
}
}
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
insert success
本文介绍了一个实现从JPG格式转换到WEBP格式的过程,并详细描述了如何将转换后的图片及其元数据存储到数据库的具体步骤。该流程包括创建实体类、处理图片文件、与服务器交互以及数据持久化。

1720

被折叠的 条评论
为什么被折叠?



