vue3+axios:图片链接转换成二进制文件流后并提交服务器

这篇具有很好参考价值的文章主要介绍了vue3+axios:图片链接转换成二进制文件流后并提交服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、基本思路

1、使用Image类创建一个新的图片。
2、将图片转换成base64。
3、将base64图片使用File类转换成二进制文件流
4、将二进制文件流使用 FormData类转换成binary类型提交服务器。

代码详解

Image类创建一个新的图片

    
   	  let imgLink = "图片Url地址";
      let tempImage = new Image();
      tempImage.src = imgLink;
      //tempImage.crossOrigin = "*";//提交的服务器是否需要设置跨域
      //const headers = { 'token': localStorage.getItem('token') };提交的服务器是否需要登录信息
      //tempImage.headers = headers;

图片转换成base64

    const imageToBase64 = (img) => {
      var canvas = document.createElement("canvas");
      canvas.width = img.width;
      canvas.height = img.height;
      var ctx = canvas.getContext("2d");
      ctx.drawImage(img, 0, 0, img.width, img.height);
      var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
      var dataURL = canvas.toDataURL("image/" + ext);
      return dataURL
    }

base64转换成二进制文件流

    const base64toFile = (dataurl, filename = 'file') => {
      let arr = dataurl.split(',')
      let mime = arr[0].match(/:(.*?);/)[1]
      let suffix = mime.split('/')[1]
      let bstr = atob(arr[1])
      let n = bstr.length
      let u8arr = new Uint8Array(n)
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n)
      }
      let file = new File([u8arr], `${filename}.${suffix}`, {
        type: mime
      })
      return file
    }

二进制流文件提交到服务器

axios提交文件流,前端,服务器,javascript,前端文章来源地址https://www.toymoban.com/news/detail-612043.html

 	  let imgLink = "图片Url地址";
      let tempImage = new Image();
      tempImage.src = imgLink;
      tempImage.onload = function () {
        let base64 = getBase64Image(tempImage);
        let file = base64toFile(base64);
        const formData = new FormData();
        formData.append('test', file);//看上图,我用的是test
        let url = '服务器地址';
        axios.defaults.headers["Content-Type"] = "multipart/form-data;boundary=" + new Date().getTime();//需要在请求头中设置文件格式,以下headers都是设置的请求头
        axios.defaults.headers['token'] = localStorage.getItem('token');//登录时获得的token信息
        axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
        axios.post(url, formData).then(res => {
          console.log(res.data)//获得服务器的返回信息
        }).catch(err => {
          console.log(err)
        })

      }

完整代码

import axios from "axios";
const getBase64Image = (img) => {
      var canvas = document.createElement("canvas");
      canvas.width = img.width;
      canvas.height = img.height;
      var ctx = canvas.getContext("2d");
      ctx.drawImage(img, 0, 0, img.width, img.height);
      var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
      var dataURL = canvas.toDataURL("image/" + ext);
      return dataURL
    }
const base64toFile = (dataurl, filename = 'file') => {
      let arr = dataurl.split(',')
      let mime = arr[0].match(/:(.*?);/)[1]
      let suffix = mime.split('/')[1]
      let bstr = atob(arr[1])//atob() 方法用于解码使用 base-64 编码的字符串,浏览器中需要使用这个方法,nodeJS中会提示使用Buffer类来实现。但是浏览器window中没有这个类,因此这里就使用浏览器中有的方法
      let n = bstr.length
      let u8arr = new Uint8Array(n)
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n)
      }
      let file = new File([u8arr], `${filename}.${suffix}`, {
        type: mime
      })
      return file
    }
      let imgLink = "图片链接地址";
      let tempImage = new Image();
      tempImage.src = imgLink;
      tempImage.crossOrigin = "*";
      const headers = { 'token': localStorage.getItem('token') };
      tempImage.headers = headers;
      tempImage.onload = function () {
        let base64 = getBase64Image(tempImage);
        let file = base64toFile(base64);
        const formData = new FormData();
        formData.append('faceFile', file);
        let url = '服务器地址';
        axios.defaults.headers["Content-Type"] = "multipart/form-data;boundary=" + new Date().getTime();
        axios.defaults.headers['token'] = localStorage.getItem('token');
        axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
        axios.post(url, formData).then(res => {
          console.log(res)
        }).catch(err => {
          console.log(err)
        })

      }

到了这里,关于vue3+axios:图片链接转换成二进制文件流后并提交服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java图片转二进制流_java将文件转化成二进制流

    二进制流的主要编码格式是base64码。可以在网上找一些在线转base64编码的网站进行尝试转换。 例如:http://imgbase64.duoshitong.com/然后通过前端展现和下载。 前端显示二进制流图片(src中放置base64码及二进制流) 前端下载二进制流文件(herf中放置base64码及二进制流,download后面放

    2024年02月06日
    浏览(43)
  • 后端返回二进制流,前端处理二进制文件流,实现预览图片以及PDF

    1、首先预览PDF需要 后端 将响应头 Content-Type 设置为PDF类型 application/pdf ,不能预览,会直接下载 2、 前端 定义接口:并设置相应类型 responseType 为 blob 请求数据:通过 window.URL.createObjectURL(res) 转成本地预览地址, 在通过 window.open() 方法打开转成本地预览地址即可预览PDF,如下

    2024年02月15日
    浏览(39)
  • html 二进制 blob 给图片赋值

    1、html 二进制流 (非base64),给图片赋值             var reader = new FileReader();             reader.onload = function (e) {               var img = document.querySelector(\\\'#canvas_img\\\');               img.src = e.target.result;             };             // data 二进流             reader.readAs

    2023年04月21日
    浏览(35)
  • Base64转二进制文件流以及转File、图片转Base64、二进制流转Base64

    1、Base64转二进制文件流 方法一: 调用示例: 方法二: 调用示例:  2、Base64转File 方法一: 调用示例: 方法二: 调用示例: 补充: 3、图片转Base64 调用示例: 4、二进制流转Base64 方法一: 调用示例: 方法二: 调用示例: 5、补充 5.1 atob() atob()  对经过 base-64 编码的字符

    2024年02月04日
    浏览(42)
  • 主从版本升级_主从_8.0.32_软链接_基于二进制日志文件

    将一套MySQL 8.0.32主从环境版本升级到8.0.35版本,主从环境如下: 主服务器 登录账号密码 端口 当前版本 目标版本 主服务器 59.217.250.226 root/topnet@123 3306 8.0.32 8.0.35 从服务器 59.217.250.227 root/topnet@123 3306 8.0.32 8.0.35 关键步骤如下: 1.断开应用 2.确定主从无延时 3.关闭主库 4.关闭从

    2024年01月24日
    浏览(42)
  • Java 中图片与二进制之间如何相互转换?

    1、 下面是一个完整的代码示例。 指定文件路径转为二进制 将网络图片转为二进制 base64 转为图片资源 2、如何判断 base64 图片的格式? 3、将网络图片转为 base64 字符串 4、将 base64 字符串转为图片输出 注:该方法的入参,base64 格式文件不得有 文件头部标识信息,否则会转换

    2024年02月10日
    浏览(38)
  • 微信小程序获取后台返回的二进制图片

    获取后台返回的二进制图片需要先使用wx.request方法发起网络请求获取图片数据,然后将返回的数据用wx.arrayBufferToBase64方法进行转换,最后将转换后的数据绑定到图片的src属性即可。 参考代码如下 其中,url为后台返回的图片地址,responseType为返回的数据类型为二进制数组。在

    2024年02月10日
    浏览(39)
  • 微信小程序接收二进制流文件(图片预览,文件打开)

     下面通过downloadOaFile接口获取到二进制流,即res.data 注意!!!直接用downloadOaFile获取的二进制流文件在写入时会导致文件损坏,必须在uni.request对象的属性中加上 如果不加,默认是 这一点非常重要,踩了好久的坑,而且这两点的区别在network的response中还看不出来,因为两者

    2024年02月16日
    浏览(36)
  • uniapp 上传本地图片、以二进制流的方式上传

    1、上传本地图片  1.1 uni.chooseImage uni.chooseImage(OBJECT) 从本地相册选择图片或使用相机拍照。 1.2 uni.uploadFile uni.uploadFile(OBJECT) 将本地资源上传到开发者服务器,客户端发起一个  POST  请求,其中  content-type  为  multipart/form-data 。 如页面通过 uni.chooseImage 等接口获取到一个

    2024年02月12日
    浏览(30)
  • 前端:JS:将图片转为二进制与其他文本传入后端

    在前端,可以将图片转换为二进制数据,并将其与其他文本字符串一起发送到后端。一种常见的方法是将所有数据组合为一个 FormData 对象,然后通过 AJAX 或 Fetch API 将其发送给后端。以下是一个示例: 解释 : 当文件输入框内容发生变化时,会触发 change 事件。然后,它会读

    2024年04月26日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包