vue.js上传图片到服务器,手机也能调用

在网上搜了搜发现

 

这里用的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以下的图上传是没问题的

 

你可能感兴趣的:(vue)