js文件上传及格式装换

文件流上传

<input type="file" id='imgBlob' @change='changeImgBlob' />

<script>
	function changeImgBlob(e){     
        // 文件流: e.target.files[0]
        
        // 将文件流放在一个formData对象内,formDate本质是一个键值对的表单
        const fd = new FormData();
        fd.append("files",e.target.files[0]);
        fd.append("token",xxxxx); // 根据需求来可以放一些其他数据
        
        // 通过接口将数据发向后台
        axios({
            url: "/yoorUrl", //URL,根据实际情况来
            method: "post",
            headers: { "Content-Type": "multipart/form-data" },
            data: fd
      	});
        
        // 将文件流对象转为blob格式,可用于预览
        img.src = window.URL.createObjectURL(file.files[0]);
    }
</script>

Base64上传

<input type="file" id='imgBlob' @change='changeImgBase' />

<script>
	function changeImgBase(e){
        // 通过FileReader将文件流转为base64格式
        	const file = new FileReader();
        // 将文件处理为base64,此操作为异步
        	file.readAsDataURL(e.target.files[0]);
        // 事先做好文件转换异步完后逻辑的处理
            file.onloadend = function (e) {
              // e.target.result 可获得base64内容

              // 上传后台
              axios({
                 url: '/yoorUrl', //URL,根据实际情况来
                 method: 'post',
                 data: {
                   files: e.target.result,
                }
               });
            };
    }
</script>

文件格式转换

// File、Blob 转化成 dataURL,上面Base64上传有写
// File基于blob封装
// dataURL(base64)转化成 Blob(二进制)对象
function dataURLToBlob(fileDataURL) {
    let arr = fileDataURL.split(','),
        mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]),
        n = bstr.length,
        u8arr = new Uint8Array(n);
    while(n --) {
      u8arr[n] = bstr.charCodeAt(n)
    }
    return new Blob([u8arr], {type: mime})
}

// File, Blob 文件数据绘制到 canvas
// 思路:File, Blob ——> dataURL ——> canvas
 
function fileAndBlobToCanvas(fileDataURL) {
    let img = new Image()
    img.src = fileDataURL
    let canvas = document.createElement('canvas')
    if(!canvas.getContext) {
      alert('浏览器不支持canvas')
      return;
    }
    let ctx = canvas.getContext('2d')
    document.getElementById('container').appendChild(canvas)
    img.onload = function() {
      ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
    }
}

//  从 canvas 中获取文件 dataURL
function canvasToDataURL() {
    let canvas = document.createElement('canvas')
    let canvasDataURL = canvas.toDataURL('image/png', 1.0) // 主要调用此方法
    return canvasDataURL
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值