盾怪网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

前端进行文件上传的各种方法总结(代码)

时间:2024/4/16作者:未知来源:盾怪网教程人气:

[摘要]originHeight > maxHeight) {if (originWidth/originHeight > maxWidth/maxHeight) {//更宽,按照宽度限定尺寸t...
originHeight > maxHeight) { if (originWidth/originHeight > maxWidth/maxHeight) { //更宽,按照宽度限定尺寸 targetWidth = maxWidth; targetHeight = Math.round(maxWidth * (originHeight / originWidth)); }else{ targetHeight = maxHeight; targetWidth = Math.round(maxHeight * (originWidth / originHeight)); } } // canvas对图片进行缩放 canvas.width = targetWidth; canvas.height = targetHeight; // 清除画布 context.clearRect(0, 0, targetWidth, targetHeight); // 图片压缩 context.drawImage(img, 0, 0, targetWidth, targetHeight); //canvas直接转blob二进制文件,但是大部分浏览器不支持 // canvas.toBlob(function (blob) { // console.log(blob) // resolve(blob) // }, 'image/png'); let base64Data = canvas.toDataURL("image/png", 0.92); let blob = dataURItoBlob(base64Data); //上传图片 let params = new FormaData(); params.append('visit_file', blob, 'cavas.png'); uploadImage(params); } } /** * base64 转二进制文件 * @param {*} base64Data */ function dataURItoBlob(base64Data) { var bytes = window.atob(base64Data.split(',')[1]); //去掉url的头,并转换为byte //处理异常,将ascii码小于0的转换为大于0 var ab = new ArrayBuffer(bytes.length); var ia = new Uint8Array(ab); for (var i = 0; i < bytes.length; i++) { ia[i] = bytes.charCodeAt(i); } return new Blob([ab], { type: 'image/png' }); } })()

这里通过FileReader获取本地base64文件,然后通过canvas对图片进行压缩,最终转为二进制的blob文件,传到服务器上。这里还可以做的更好,利用promise,对压缩功能进行返回,不必在压缩函内进行调用上传,降低耦合度。这里为了大家理解,我就没有分开。哈哈~~主要还是我嫌麻烦...

四、Vue+axios上传图片

        /**
       * 
       * @param {路由} url 
       * @param {路由参数} params 
       * @param {文件数据} body 
       */
      upload(url, params = '', body = {}) {
        let path = config.host + url + params;
        // console.log(body);
        return axios({
          method: "POST",
          url: path,
          data: body,
          processData: false, //必不可少参数
          traditional: true, //比不可少参数
          contentType: false,//比不可少参数
          headers: {
            'token': localStorage['token'],
            'originno': config.originno,
            "Content-Type": false
          }
        }).then(
          res => res
        ).catch((error) => {
          console.log(error);
        })
      }

我也是最近在做项目时遇到需求,当时使用的就是vue+axois,怎么提交怎么报错,最后发现就是文件没有传过去,只要配置上那三个必不可少的参数,就可以上传成功。如果想让用户有更好的体验,可以对图片进行一下压缩和本地预览。

相关推荐:

如何使用php和layui一起实现图片的上传与预览的代码

php如何实现等比例压缩图片的代码

以上就是前端进行文件上传的各种方法总结(代码)的详细内容,更多请关注php中文网其它相关文章!


网站建设是一个广义的术语,涵盖了许多不同的技能和学科中所使用的生产和维护的网站。



关键词:前端进行文件上传的各种办法总结(代码)




Copyright © 2012-2018 盾怪网教程(http://www.dunguai.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版