图片上传(基于vue)

  相信上传图片是所有系统必备的功能吧,工作中的第一个管理系统就在上传图片的功能上卡顿了一整天。

  当时用的elementUI组件,但是由于样式和设计图样式差别较大再加上原生相较好理解,便使用了原生实现图片上传功能。

  菜鸟上路,望多多指点。

  • 图片上传原理(csdn里看到的比较通俗易懂的图片上传原理) 

   参考地址:https://blog.csdn.net/q857277886/article/details/79092591

  前端网页文件上传一般使用 <input type="file" />来实现。

  1. 在 HTML 文档中 <input type="file" />标签每出现一次,一个 FileUpload 对象就会被创建。

    2.该标签包含一个文本输入字段,用来输入文件名,还有一个按钮,用来打开文件选择对话框以便图形化选择文件,该标签的 value属性保存了用户指定的文件的名称。

3.多选:标签可以通过添加 multiple 属性来支持多选;如果选择了多个文件, 这个值表示第一个被选择的文件路径. JavaScript 可以通过 Input 的 FileList 属性获取到其他的文件路径.

4.文件信息:可以通过 input.files 属性返回 — 返回值是一个 FileList 对象,这个对象是一个包含了许多 File 文件的列表,列表包含图片的name,type,size等属性。

    5.限制文件类型:你可以使用 input 的 accept 属性,accept 属性接受一个逗号分隔的 MIME 类型字符串。如: accept="image/png, image/jpeg" or accept=".png, .jpg, .jpeg" — PNG/JPEG

    6.选择文件会触发input的onchange事件;

    7.上传:上传文件前 使用FileReader对象读取指定file的文件,并将文件转换为二进制字符串, 并将xhr对象, overrideMimeType 属性设置为text/plain; charset=x-user-defined-binary, 最终后台接收到二进制后再做具体处理。(注:小编用的是FormData对象)

  • 实现步骤

  ①:样式的实现

    代码:

      <el-form-item label="产品图片" id="img_box">
        <form ref="form" enctype="multipart/form-data" id="formImg" style="position:relative">
          <input type="file" name="uploadFile" @change="creatUrl($event)" accept="image/png,image/jpg,image/jpeg" class="imgInput" style="position:absolute; z-index:9999999">
          <img v-if="imageUrl" :src="data:imageUrl" style="position:absolute; top:0; left:0; height:80px; width:80px"></img>
          <span style="position:absolute; bottom:20px; left:100px; width:400px; color:#999999; font-size:12px">图片格式为JPG/JPEG/PNG,图片大小不超过2M</span>
          <em v-if="imgSytle" style="width:280px;display:block;position:absolute;top:70px;color:#f56c6c; font-size:12px;font-style:normal">{{msg2}}</em>
        </form>
      </el-form-item> 
    
    首先给form标签插入设计图要求的背景图片,这时背景图片是看不见的,因为根据代码,input标签定位到了form上,而img标签又定位在form上input下,所以我们需要将input标签的背景颜色设置为透明 opacity:0 ,这样在没有上传时,页面显示的为form的背景图片,确定好要上传的图片时,则用img标签显示上传的本地图片。
 
    注:也可以都绑定给img标签,双向绑定img的src,根据要求实时更新src.
 

  ②:在用户确定了要上传的图片时,页面要显示本地要上传的图片

    注:input.files 属性返回 — 返回值是一个 FileList 对象,这个对象是一个包含了许多 File 文件的列表,列表包含图片的name,type,size等属性。

    HTML代码 :

<input type="file" name="uploadFile" @change="creatUrl($event)">

      

      首先给input标签绑定“onchange”事件,在确定了要选择后的图片时,触发 creatUrl($event),然后通过 event.target.files[0] 找到图片信息

      创建本地图片URL,属性 URL.createObjectURL 实现,然后将创建好的imageUrl,绑定到标签img的src上,OK!!!!

      也可用  event.target.files[0] .size,  event.target.files[0] .type 进行判断以此来限制用户上传图片的大小和类型

     JS代码:  

let imageUrl=URL.createObjectURL( event.target.files[] ) 

             

  ③:上传图片到后台

    通过FormData对象可以组装一组用XMLHttpRequest发送请求的键/值对。它可以更灵活方便的发送表单数据,因为可以独立于表单使用。表单的编码类型设置为multipart/form-data 并且form要绑定vue的ref属性,方便获取form对象。

      代码:

<form ref="form" enctype="multipart/form-data" >

    步骤:提交按钮绑定onclick事件,submit方法

         在submit方法里,利用vue的this.$refs属性获取form对象,var fd = new FormData(this.$refs.form)

         利用axios将数据fd发送给后台,后台会返回此图片的fileName

         然后调用上传表单的接口,将返回的fileName和表单填写的信息一起发送给后台,此时上传图片就成功了。

         图片渲染时,先请求渲染接口获取图片的线上imgName,再通过img的src拼接图片的线上地址,代码如下:

     

<img :src="`http://***.***.***.***:8080/product/getFtpImage.do?filePath=`+item.imgName" style="width:120px; height:120px"></img>

以上便是图片上传的实现,方法有很多种,小编只用了其中之一(formData),具体功能具体对待吧。

比心。。。。

     

后台管理系统之“图片上传” --vue的更多相关文章

  1. ASP.NET MVC+Easyui 后台管理系统的图片上传

    实现图片的上传 easyui代码部分: //添加按钮 var URL; $("#btnCreate").click(function () { $('#UserDialog').d ...

  2. vue 剪切图片上传头像,使用 cropperjs 实现

    我使用的是vue,移动端的项目. 官网地址:cropperjs GitHub地址:https://github.com/fengyuanchen/cropperjs/blob/master/READM ...

  3. Asp.Net Mvc 使用WebUploader 多图片上传

    来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...

  4. vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理

    一.前言 三年.net开发转前端已经四个月了,前端主要用webpack+vue,由于后端转过来的,前端不够系统,希望分享下开发心得与园友一起学习. 图片的上传之前都是用的插件(ajaxupload), ...

  5. 图片上传JS插件梳理与学习

    项目的oper端和seller端,用了两个不同插件,简单了解一下: 一.seller端:AjaxUpload.js seller端使用的是 AjaxUpload.js ,封装好的一个库.调用时传入参数 ...

  6. 用Vue来实现图片上传多种方式

    没有业务场景的功能都是耍流氓,那么我们先来模拟一个需要实现的业务场景.假设我们要做一个后台系统添加商品的页面,有一些商品名称.信息等字段,还有需要上传商品轮播图的需求. 我们就以Vue.Element ...

  7. AntDesign vue学习笔记(七)Form 读写与图片上传

    AntDesign Form使用布局相比传统Jquery有点繁琐 (一)先读写一个简单的input为例 <a-form :form="form" layout="v ...

  8. H5 利用vue实现图片上传功能。

    H5的上传图片如何实现呢? 以下是我用vue实现的图片上传功能,仅供参考. <!DOCTYPE html> <html> <head> <meta chars ...

  9. vue 图片上传功能

    这次做了vue页面的图片上传功能,不带裁剪功能的! 首先是html代码,在input框上添加change事件,如下:   <ul class="clearfix">   ...

随机推荐

  1. nDPI-dev分析

    目前在 分为两个层次:其一是应用分析,学会如何使用:其二是原理分析,看懂它如何实现. 1. 打包该数据帧,搜集l3.l4层报头信息 2. 查询链接跟踪(如果已被标识,则直接获取到该数据帧所属协议类型) ...

  2. (最完美)红米手机5的Usb调试模式在哪里打开的教程

    就在我们使用安卓手机接通PC的时候,或者使用的有些app比如我们企业营销部门就在使用的app引号精灵,之前老版本就需要开启usb开发者调试模式下使用,现就在新版本不需要了,如果手机没有开启usb开发者 ...

  3. Failed to find configured root that contains

    这个主要问题是在android系统下7.0 拍照时,Android提供FileProvider类来供应用之间共享数据. 出现这个问题多为xml文件 path 类型和代码中调用的类型不同导致的 以下为多 ...

  4. git 拉取远程代码

    git 拉取远程代码 || 利用vscode编辑器自带了git,可在ctrl+~打开控制台拉取代码,非常好用哦~在实际项目开发过程中,往往是已经存在远程项目了,我们定义的需求是只需要简单的操作git, ...

  5. cmd命令行结果保存到txt里,屏幕显示一行就保存一行到txt

    #coding:utf-8 """ 1.重定向print 2.python与cmd命令 """ import sys import os i ...

  6. Underscore源码阅读极简版入门

    看了网上的一些资料,发现大家都写得太复杂,让新手难以入门.于是写了这个极简版的Underscore源码阅读. 源码: https://github.com/hanzichi/underscore-an ...

  7. webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?

    资源相对引用路径 问题描述 一般情况下,通过webpack+vuecli默认打包的css.js等资源,路径都是绝对的. 但当部署到带有文件夹的项目中,这种绝对路径就会出现问题,因为把配置的static ...

  8. vue2.0配置路由

    配置路由之前,先检查vue版本,(案例适用vue2.0) 采用npm包的形式进行安装. 安装路由依赖:npm install vue-router(代码中,如果在一个模块化工程中使用它,必须要通过 V ...

  9. 在Debian9服务器上安装最新版Python

    通过Xshell 6 远程连接linux服务器 安装前的准备工作 更新服务器: 命令:apt update && apt upgrade -y 安装python3的依赖库: 命令:ap ...

  10. Git版本库管理

    Step 1 查看哪些历史提交过文件占用空间较大 使用以下命令可以查看占用空间最多的五个文件: git rev-list --objects --all | grep "$(git veri ...