Vue图片上传,vue上传图片到后端

  Vue图片上传,vue上传图片到后端

  本文主要介绍Vue项目中html5图片的上传,通过示例代码详细介绍,具有一定的参考价值。感兴趣的朋友可以参考一下。

  

目录

  图例1。选择图片2。预览图片2.1添加图片预览代码的两种方法比较3。作物图片4。上传选择图片-预览图片-裁剪图片-上传图片

  我将通过例子浏览图片。接下来,我将详细介绍每个步骤的具体实现。

  

图例

  

1.选择图片

  选图有什么好讲的?就一个输入[type=file],然后点开?确实如此。但是,如果我们想要更加友好,例如,我们需要过滤掉非图像文件,或者只允许从相机中拍摄图片等。但是我们还是需要一些简单的配置。

  让我们先来看看最简单的选择文件:

  输入类型=文件/

  您可以查看上面非图像类型的文件,这不是我们想要的结果。毕竟我们只想要图像类型。这可以通过accept属性实现,如下所示:

  输入类型=file accept=image/*

  这样就可以过滤掉非图片类型。但是可能图片类型太多,有些可能服务器不支持。所以,如果要保守一点,只允许jpg和png类型。你可以这样写:

  输入类型=file accept=image/jpg,image/jpeg,image/png

  或者像这样

  输入类型=文件接受=。jpg,jpeg, jpg

  好了,过滤非图像的需求解决了。然而,有时该产品也要求您只能从相机中收集图片。比如你需要上传自己的身份证照片,防止别人的身份证从网上上传。那么capture属性就派上用场了:

  输入类型=文件接受=图像/* 捕获

  这时候你不能从文件系统中选择照片,只能从相机中收集。在这一点上,它可能感觉很完美,但仍然有一个问题。可能会有一些异常的产品需要默认开启前置摄像头来采集图片。比如他们只是想要你的自拍照片。默认情况下,Capture调用后置摄像头。启用默认前置摄像头以设置capture=“user”,如下所示:

  输入类型=文件接受=图像/* 捕获=用户

  好了,选图就这么多了。有一点需要注意的是,有些配置可能会有一些兼容性问题,所以你需要在不同的机型上进行测试,看看效果。

  先说预览图的实现。

  

2.预览图片

  如果不使用图片预览,点击上传图片后无法查看。比如如下图:我又换了图片,图片路径变了,但图片没变。

  

2.1添加图片预览代码

  当图片改变时,您可以预览它。

  1:源代码:使用URL.createObjectURL预览

  !声明文档类型

  html lang=en

  头

  meta charset=UTF-8

  meta http-equiv= X-UA-Compatible content= IE=edge

  meta name= viewport content= width=device-width,initial-scale=1.0

  标题文档/标题

  风格

  img {

  宽度:300px

  高度:200px

  }

  /风格

  /头

  身体

  form action= method=get

  输入id= input file type= file accept= image/*

  Img=。/301571.jpg id=预览图片 alt=图片预览 title=生活在风暴中.

  /表单

  !-图片预览-

  脚本

  const $=document . getelementbyid . bind(document);

  const $ input file=$( input file );

  const $ preview image=$( preview image );

  $ inputfile . addevent listener( change ,function() {

  const file=this . files[0];

  $previewImage.src=file?URL.createObjectURL(文件):“”;

  },这个);

  /脚本

  /body

  /html

  2.源代码:用FileReader预览

  !声明文档类型

  html lang=en

  头

  meta charset=UTF-8

  meta http-equiv= X-UA-Compatible content= IE=edge

  meta name= viewport content= width=device-width,initial-scale=1.0

  标题文档/标题

  风格

  img {

  宽度:300px

  高度:200px

  }

  /风格

  /头

  身体

  form action= method=get

  输入id=输入文件 type=文件 accept= image/*

  img src= ./301571 .jpg id=预览图像 alt=图片预览

  /表单

  !-图片预览-

  脚本

  const $=文档。getelementbyid。bind(文档);

  const $输入文件=$(输入文件);

  const $预览图像=$(预览图像);

  $ inputfile。addevent侦听器( change ,function() {

  const file=this。文件[0];

  const reader=new FileReader();

  reader.addEventListener(load ,function() {

  $预览图像。src=读者。结果;

  },假);

  如果(文件){

  reader.readAsDataURL(文件);

  }

  },假)

  /脚本

  /body

  /html

  预览图片总结:

  

两种方法的对比

  我个人更加倾向于使用URL.createObjectURL()。主要原先它的应用程序接口简洁,同步读取,并且他返回的是一个URL,比档案员返回的base64更加精简。兼容性上,两者都差不多,都是在陆军部(陆军部)的阶段。性能上的对比,在铬上,选择了一张2M的图片,URL.createObjectURL()用时是0 , 而字符输入流用时20毫秒左右。 0 感觉不太合理,虽然这个方法立刻就会返回一个URL,但是我猜测实际上这个统一资源定位器指定的内容还没有生成好,应该是异步生成的,然后才渲染出来的。所以并没有很好的办法来对比他们的性能。

  

3.裁剪图片

  关于图片的裁剪,很自然的会想到使用画布,确实是要通过画布,但是如果全部我们自己来实现,可能需要做比较多的工作,所以为了省力,我们可以站在巨人的肩膀上。比较优秀的图片裁剪库是cropperjs,该库可以对图片进行缩放、移动和旋转。随后会持续更新canvas,(我也在学.永远保持谦逊,人外人天外天,拒绝凡尔赛)

  cropperjs的详细配置这里就不展开了,需要的可以自己去看文档就好。下面我们就以这个库为基础,实现一个裁剪人脸的例子:

  源码:当然这个只是简单的写下,为了写博客在电脑操作小伙伴要自行查看下移动端兼容

  !声明文档类型

  html lang=en

  头

  meta charset=UTF-8

  meta http-equiv= X-UA-Compatible content= IE=edge

  meta name= viewport content= width=device-width,initial-scale=1.0

  标题文档/标题

  link rel=样式表 href= https://cdnjs。云层耀斑。com/Ajax/libs/cropper js/1。5 .6/cropper。量滴 CSS

  script src= https://cdnjs。云层耀斑。com/Ajax/libs/cropper js/1。5 .6/cropper。量滴js /脚本

  风格。预览-图像,裁剪者-图像{

  最大宽度:100%;

  }。收割者

  显示:无;

  位置:绝对;

  top:0;

  右:0;

  底部:0;

  左:0;

  背景:# ccc

  字体大小:0.27雷姆;

  文本对齐:居中;

  }。内部{

  身高:100%;

  显示器:flex

  伸缩方向:列;

  对齐-内容:居中;

  对齐-项目:居中;

  }。面容器{

  位置:相对;

  宽度:320像素

  高度:320像素

  边距:50px自动;

  }。cropper-modal {

  背景:URL( https://好的。166 .net/gameyw-misc/OPD/壁球/2019 10 28/152551-m 37 snfsyu 1。png’)中心无重复;

  背景尺寸:100% 100%;

  不透明度:1;

  }。cropper-bg {

  背景:无;

  }。裁剪器-查看框{

  不透明度:0;

  }。提示{

  字体大小:16px

  }。工具栏{

  显示器:flex

  对齐-内容:居中;

  边距:50px 0;

  }。btn {

  宽度:150像素

  行高:40px

  字体大小:20px

  文本对齐:居中;

  颜色:# fff

  背景:# 007fff

  }

  /风格

  /头

  身体

  form name= input action= html _ form _ action。PHP method= get

  输入id=输入文件 type=文件 accept= image/*

   img class= preview-image id= preview image src= alt=

  !-庄稼裁剪框-

  div class=cropper id=cropper

  div class=inner

  div class=face-container

  img class= cropper-image id= cropperImage

  /div

  div class=tips 请将面部区域置于人脸框架内/div

  div class=工具栏

  div class=btn id=确认确认/div

  /div

  /div

  /div

  /表单

  /body

  脚本

  const $=文档。getelementbyid。bind(文档);

  const $ cropper=$( cropper );

  const $输入文件=$(输入文件);

  const $预览图像=$(预览图像);

  const $ cropperImage=$( cropperImage );

  const $confirmBtn=$(confirm )

  设cropperInstance=null

  //选择图片后,显示图片裁剪框

  $ inputfile。addevent侦听器( change ,function() {

  const file=this。文件[0];

  如果(!文件)返回;

  $ cropperimage。src=URL。createobjecturl(文件);

  showCropper();

  },假);

  //点击确认按钮,将裁剪好的图片放到图片标签显示。

  $确认BTN。addevent侦听器( click ,function() {

  const URL=cropperinstance。getcroppedcanvas().toda aurl( image/JPEG ,1.0);

  $克罗珀。风格。display= none

  $ previewImage.src=url

  },假);

  函数showCropper() {

  $克罗珀。风格。display= block

  cropperInstance cropperInstance。destroy();

  cropperInstance=新裁剪者(cropperImage,{

  viewMode: 1,

  比例:1,

  autoCropArea: 1,

  拖动模式:移动,

  导游:假的,

  推荐理由:假的,

  cropBoxMovable: false,

  cropBoxResizable: false

  });

  }

  /脚本

  /html

  

4.上传

  前面的操作已经完成了图片上传前的准备,包括选择图片、预览图片、编辑图片等,那接下来就可以上传图片了。上面的例子中,使用了cropperinstance。getcroppedcanvas()方法来获取到对应的帆布对象。有了帆布对象就好办了,因为canvas.toBlob()方法可以取得相应的一滴对象,然后,我们就可以把这个一滴对象添加到FromData进行无刷新的提交了。大概的代码如下:

  变更(e) {

  //1.手写的投入需要一个对象将本地图片转换为对应的格式来上传

  let formData=new formData();

  //2.电子目标文件就是选中的图片的一个

  formData.append(file ,e . target。文件[0]);

  //3.将上传这个对象传给修改头像的接口

  updateImg(formData).然后((res)={

  //4.此时已经传到修改头像接口了

  //4.1 传到修改头像的接口后,在更新接口中再次更新头像属性

  更新({ avatar:RES . data。path });

  //存到本地//信息是本地存储点击头像获取的个人信息,在此页面初始调用本地存储数据,

  //这里赋值信息对象,因为上面渲染头像用的是本地,所以(修改后端图片路径,重新调用后端更新接口后),

  //还要重新赋值本地存储,才能后端变化。本地页面,因为是点击头像进入修改页,才存储的数据,不会随后端更新,

  //所以还要重新赋值本地存储

  这个。信息。头像=RES . data。路径;

  本地存储。setitem( userInfo-Avatar),JSON。stringify(这个。info));

  this.show2=false

  });

  },

  浪哥小贴士:如果在移动端,有的手机会检测自动校正角度,导致有些角度不对可以使用半铸钢钢性铸铁(铸造半钢)的转换:旋转(-90度)顺时针旋转90 度抵消掉这个角度就好。

  以上就是本文关于Vue项目实现html5图片上传的示例代码。更多相关Vue html5图片上传内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: