这里用的vue.js开发的前端
点击上传
这是在网上co来的上传图片 挺好用的 选择后的预览都在里面
chooseImg (event) {
let file = event.target.files[0]
//console.log(file);
let reader = new FileReader()
let img = new Image()
// 读取图片
if(file == null || file == ''){
console.log("gg");
}
reader.readAsDataURL(file)
// 读取完毕后的操作
reader.onloadend = (e) => {
img.src = e.target.result
// 这里的e.target就是reader
// console.log(reader.result)
// reader.result就是图片的base64字符串
this.base64 = reader.result
console.log(this.base64);
}
// 预览图片
let canvas = this.$refs['imgPreview']
let context = canvas.getContext('2d')
img.onload = () => {
img.width = 100
img.height = 100
// 设置canvas大小
canvas.width = 100
canvas.height = 100
// 清空canvas
context.clearRect(0, 0, 100, 50)
// 画图
context.drawImage(img, 0, 0, 50, 50)
}
},
依然是co来的js代码0.0
这里直接把图片的base64码放到了参数里,可以直接传给后台解析。
this.getClass().getResource("").getPath();
这样获取到当前路径然后慢慢 getParent(); 获取到图片文件夹
我后台就是直接拿到base64码解码成byte数组 然后用io流传到服务器的某个目录下存起来 数据库里存储的是图片名+.格式
值得注意的是base64码前面会带一些没必要的编码
当我们上传图片的.png的时候是base64:png什么什么的
上传.jpg文件则会带有jpeg 上传图片不需要前面这一串字符 需要截取
if(imgbase64.substring(11,15).equals("jpeg")) {
imgbase = imgbase64.substring(23, imgbase64.length());
}else {
imgbase = imgbase64.substring(22, imgbase64.length());
}
之后调用Base64解码工具类解码完成图片上传
附上解码工具类
package addaoil.support.utils;
import java.io.FileOutputStream;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.OutputStream;
public class Base64 {
//base64字符串转化成图片
public static boolean GenerateImage(String imgStr,String imgurl)
{ //对字节数组字符串进行Base64解码并生成图片
if (imgStr == null) { //图像数据为空
return false;
}
BASE64Decoder decoder = new BASE64Decoder();
try
{
//Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for(int i=0;i
BASE64Decoder用不了的话可以百度搜一下。
img.onload = () => {
img2.width = 1000
//img2.height = 1000
let canvas2 = this.$refs['imgPreview']
let context2 = canvas.getContext('2d')
canvas2.width = 1000;
canvas2.height = canvas.width * (1000 / img2.width);
console.log(this.base64.length);
//this.base64 = this.base64.split(',')[1];
img.width = 100
img.height = 100
// 设置canvas大小
canvas.width = 1000
canvas.height = 1000
// 清空canvas
context.clearRect(0, 0, 100, 50)
// 画图
context.drawImage(img, 0, 0, 1000, 1000)
this.base64 = canvas.toDataURL("image/jpeg", 1.0); // 这里就拿到了压缩后的base64图片
canvas.width = 100
canvas.height = 100
context.drawImage(img, 0, 0, 50, 50)
console.log(this.base64.length);
}
图片太大base64码几千万长度的字符串POST都传不了 然后做了个图片压缩 目前15M以下的图上传是没问题的