一、基本思路

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.lengthlet u8arr = new Uint8Array(n)while (n--) {u8arr[n] = bstr.charCodeAt(n)}let file = new File([u8arr], `${filename}.${suffix}`, {type: mime})return file}

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

       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);//看上图,我用的是testlet 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.lengthlet 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:图片链接转换成二进制文件流后并提交服务器相关推荐

  1. obsidian图片链接转换成markdown语法,不关闭wiki链接

    问题 近期尝试使用了obsidian作为我的笔记软件,但是发现obsidian的图片链接会自动使用wiki链接的方式保存,比如这样的格式![[图片路径]],但是这样的路径,一般的markdown编辑器 ...

  2. base64格式图片转换成二进制流并生成图片文件

    1.base64格式图片转换成二进制流并生成图片文件 /*** 将base64格式的字符串转换成二进制流,并转换成图片*/ public boolean changeBase64ToImage(Str ...

  3. 75. InputStreamReader和OutputStreamWriter(转换流--字节流转换成字符流)

    转换流: InputStreamReader   输入字节流转换成输入字符流 OutputStreamWriter  输出字节流转换成输出字符流 总结:就是字节流转换成字符流,但是不能字节流转换成字节 ...

  4. java将图片的url转换成File,File转换成二进制流byte

    package com.xqy;import java.io.*; import java.net.HttpURLConnection; import java.net.URL; //java将图片的 ...

  5. Android代码(Handler的运用),HttpURLConnection的应用,将url图片地址转换成图片。

     1 布局文件, <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...

  6. 带字的图片如何转换成可编辑的文字?

    将图片文字转换成可编辑的文字,有很多方法可以选择,可以使用输入法打字的方法,将图片上的文字输入到电脑文档中:还可以使用OCR文字识别软件的方法,把图片文字识别出来,然后保存到word文档中: 上面的两 ...

  7. C#调用大华相机SDK获取图片,转换成VisionPro的Icogimage格式

    文章讲的是C#调用大华相机SDK,通过回调事件获取图片并转换成visionpro的Icogimage格式,文章底部会分享例程.在调用SDK之前,需要先安装大华的相机软件到C盘,不安装到C盘会显示依赖项 ...

  8. python图片raw转换成jpg

    代码: import numpy as np import imageiorawfile = np.fromfile('./_DSC7472.ARW', dtype=np.float32) # 以fl ...

  9. 怎么把图片文件转换成PDF文件

    除了office文件外,我们最常用的就是PDF文件了.因为PDF文件格式可以将文字.字型.格式.颜色及独立于 设备和分辨率的图形图像等封装在一个文件中.该格式文件还可以包含超文本链接.声音和动态影像等 ...

最新文章

  1. Windows下R语言环境安装
  2. 高性能javascript 文件加载阻塞
  3. 面向对象知识点之statickeyword的使用
  4. POJ 1330 LCA最近公共祖先 离线tarjan算法
  5. Spring MVC @SessionAttributes注解
  6. php session存到redis,php Session存储到Redis的方法
  7. 新手课堂之汽车灯光操作及位置
  8. (一)云计算OpenStack介绍
  9. IOS --xcode删除Provisioning Profiles文件
  10. 常用接口抓包以及接口测试工具总结
  11. (2)Spring框架----IOC基础快速入门
  12. 电力LED时钟系统解决方案实现精确时间同步
  13. CentOS安装配置freeIPA
  14. HTML hr 标签的用法
  15. 做快乐的程序员 - 李战 在淘宝网的一次讲座
  16. 【processing码绘】简单实现码绘动态图形与拓展
  17. (转载)年终总结 算法数据的思考 结尾彩蛋
  18. 实验(1)信号的采样
  19. flash播放器插件与flash播放器的区别
  20. vlc 安卓版开发_VLC播放器Android版下载

热门文章

  1. 广东最新道路运输安全员模拟真题集及答案解析
  2. 数据建模——模型融合
  3. 图像预处理之数据增广
  4. 应急照明及疏散指示系统在散货封闭料场的研究与应用
  5. 高等数学——简单直观地了解定积分
  6. LDF文件步骤及内容详解
  7. SM2算法第一篇:ECC加密算法
  8. 北京昌平区专精特新中小企业申报流程
  9. 论文解读 | [CVPR2019] 基于自适应文本区域表示的任意形状场景文本检测
  10. [SpringBoot实战系列]实现发送邮件API/发件人中文别名