axios获取图片显示_Vue.js+axios图片预览以及上传显示进度

在平时项目开发中,我们经常会对文件做一些上传操作,不仅仅要实现基本需求,也要兼顾用户体验,根据自己在工作中遇到的问题谈谈对图片上传的预览以及上传进度的优化。

1.搭建项目

基于Vue.js+axios搭建的项目,新建一个Index.Vue项目如下,基本结构可以先可以选择文件,预览文件。

上传图片

选择文件:

图片预览:

图片预览

上传文件到服务器

...

data(){

return{

imgPreViewSrc:'', //文件预览地址

file:null, //上传文件

}

}

methods:{

}

...

.text-center{

text-align: center;

}

.wrapper{

font-size: 16px;

width: 60%;

height: 100%;

margin: 0 20%;

border: 1px solid #ddd;

img{

width: 200px;

}

button{

width:120px;

height: 30px;

margin-top: 30px;

line-height: 30px;

border: 1px solid #CCC;

text-align: center;

}

}

input的类型type设置为file,可以选择文件,multipe属性设置为true,一次可以选择多个文件。

运行项目,页面如下:

2.选择文件以及预览

选择一个图片文件(bg.jpg),之前有在input绑定文件改变监听方法,打印事件参数如下:

发现刚才选择的文件在Event>target>files下面

files是一个数组,刚才只选择了一张图片,所以长度为1,图片的名称(name),大小(size),类型(type)都有包含。

2.1.设置文件类型

在input标签accept属性设置文件类型,当用户打开文件资源管理器选择文件时,会过滤掉其他类型文件,能够从源头避免用户选择脏文件,也更加方便用户选择文件。

2.2.图片预览

要将用户选择的文件显示到页面上,以方便用户下一步操作,因为用户可能会从选择的文件中再挑选几张图片操作,例如上传到服务器。

图片预览要用到URL对象的URL.createObjectURL(file)方法生成一个blob地址,直接赋值给img标签的src,页面就可以展示。(URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。)

在methods添加handleFileChange方法,预览图片

...

// 文件改变监听事件

handleFileChange(evt){

console.log(evt);

let file=evt.target.files[0];

this.file=file;

let src=URL.createObjectURL(file);

this.imgPreViewSrc=src;

},

...

3.显示上传文件进度

选择好文件之后,文件要上传到服务器,有时候文件很大或者网速很慢的情况下,用户需要知道已经上传进度,如果没有上传进度,用户退出页面那么文件就上传失败了。

3.1.修改script文件

引入axios,封装上传Promise函数

在methods里添加上传方法uploadFile

import axios from 'axios';

// 文件上传服务api

const baseURL='http://127.0.0.1/api';

function upload (params,cb=null) {

return new Promise((resolve, reject) => {

axios.create({

baseURL,

})({

url:'/upload/uploadFile/image',

method:'post',

data:params,

// 上传进度

onUploadProgress:function(progressEvent){

if(progressEvent.lengthComputable && cb){

cb(progressEvent);

}

},

}).then(res => {

console.log(res.data);

if(res.status===200){

resolve(res.data);

}else{

reject(res.data);

}

}).catch(err => {

reject(err);

});

});

}

...

// 上传文件到服务器

uploadFile(){

let file=this.file;

if(file){

let formData = new FormData();

formData.append('file', file);

upload(formData,(progressEvent)=>{

console.log(progressEvent);

});

}else{

alert('请选择文件')

}

...

3.2.上传进度

在axios入参新增onUploadProgress方法,在文件上传过程中该方法会调用,参数包含上传的一些信息。

有关ProgressEvent的一些介绍:

ProgressEvent 是一个用来测量底层操作进度的接口,可以测量HTTP请求(例如:一个 XMLHttpRequest请求、或者一个底层资源如img,audio,video等,ProgressEvent常用属性值:

ProgressEvent.lengthComputable:它是一个布尔值标识,表明总共需要完成的工作量和已经完成的工作是否可以被底层所计算到。换而言之,它表示的就是过程是否是可以测量的。

ProgressEvent.loaded:是一个unsigned long long类型,表示底层进程已经执行的工作量。所做的工作比率可以用属性和ProgressEvent.total计算。当使用HTTP下载资源时,这只表示内容本身的一部分,而不是头和其他开销。

ProgressEvent.total:是unsigned long long类型,表示底层进程正在执行的工作总量。当使用HTTP下载资源时,这只表示内容本身,而不是头和其他开销。

点击上传按钮,打开控制台:

可以发现ProgressEvent中loaded属性值为图片文件上传的大小,total为文件的大小。

3.3.在页面添加进度条

为了组件通用化,新建一个Progress.vue组件,接受一个progressValue进度参数。

上传进度:{{progressValue}}%

上传成功!

export default {

props:['progressValue'],

name: 'Progress',

};

.progress-box{

position: fixed;

top:0;

left:0;

bottom: 0;

right:0;

background: rgba(0,0,0,0.5);

.progress-content{

position: absolute;

top:50%;

left:50%;

width: 300px;

height: 76px;

padding: 8px 30px;

transform: translate(-150px,-38px);

background: #fff;

border-radius: 8px;

p{

margin-bottom: 5px;

}

progress{

width: 100%;

height: 22px;

}

progress::-webkit-progress-bar{

background-color:#d7d7d7;

}

progress::-webkit-progress-value{

background-color:orange;

}

}

}

在div末尾添加Progress组件,再修改Index.vue文件methods的上传方法:

...

import Progress from '../components/Progress';

...

// 上传文件到服务器

uploadFile(){

let file=this.file;

if(file){

let formData = new FormData();

formData.append('file', file);

upload(formData,(progressEvent)=>{

this.isShowProgressBox=true;

this.progressValue=parseFloat((progressEvent.loaded/progressEvent.total*100).toFixed(2));

if(this.progressValue===100){

let timer=setTimeout(()=>{

this.isShowProgressBox=false;

clearTimeout(timer);

timer=null;

},500);

}

});

}else{

alert('请选择文件');

}

...

可以看到,点击上传后,页面出现进度模态框,让用户知道已经上传百分比,优化用户体验。

关于图片上传其实还能优化的方面还有很多,后续在工作中遇到问题再加以论述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剑盾神秘礼物正在维护服务器,宝可梦剑盾神秘礼物获取途径一览

宝可梦剑盾神秘礼物获取途径一览更新时间:2019-11-09作者:shaoshao宝可梦剑盾神秘礼物获取攻略:活动、礼包以及礼物这系列的东西,想必一定是各位游戏玩家们最为喜爱的一部分了吧。在今日,宝可梦剑盾该款角色扮演类冒险…

httpurlconnect设置中文参数_CNC机床参数的设置及报警解除,赶紧收藏吧!

在三菱CNC的硬件连接检查与设置执行完毕向系统送电后,显示器上的READY绿灯仍然不亮。而且在〔诊断〕――〔报警〕 画面上显示很多报警内容,让初次使用三菱CNC的调试工程师感到困惑。而且三菱CNC的参数多达700余种,哪些是开机时必须设置的呢&a…

createsolidcaret 后 很快就不闪烁了_为什么LED灯会越用越暗?为什么会闪烁?

现在LED灯的制作首先要经过严谨的电脑编程制作,制作好灯板,再进入装配车间的流水线,具体咱们就不再展开了。大家都有这么一个生活经验刚买回来的LED灯,总是特别亮,但是过一段时间后很多灯会变得越来越暗,为…

python最大约数是_python – 找到最大的公约数(赋值错误,我迫切需要你的帮助)

我有一个作业(作业)如下:Write a program which enters two positive integers a and b from thekeyboard. Also write a recursive function for determining the gcd(greatest common divisor) of a and b using Euclid’s algorithm.According to this algorithm…

c#简单记事本应用程序的快捷方式_Windows 10七月更新又翻车,记事本没了

每一次微软更新,总是能引起一篇“哀嚎”,翻车实在太频繁了,让人又爱又恨。近日,微软在本月更新补丁推送上,进行了新的调整,让分预装的应用程序被悄然删除,这导致不少用户只能逐一重新安装。从目…

python我的世界给予物品指令_我的世界指令给予物品 我的世界指令给予物品是多少...

给予物品指令为 /give 人物id 物品id 数量,如果数量不填的话默认是64个。示例:/give AW fire_charge 64 给玩家AW 64个火焰弹。其他指令一览/nick ID 名称 -给某人改一个名 ID是加白名单的名字/backup -运行备份命令/fireball -发射一个火球(会破坏方块)…

db2 空值转换函数_Hive常见函数的使用

hive函数1.关系函数等值比较 语法&#xff1a;AB 如果表达式A和表达式B相等&#xff0c;则为TRUE&#xff1b;否则为FALSE不等值比较 <>语法&#xff1a;A <> B如果表达式A为null&#xff0c;或者表达式B为null&#xff0c;返回null&#xff1b;如果表达式A和表达式…

中级软件测试笔试题100精讲_汇集上千位软件测试精英面试笔试题,最全面的题型都在这!...

知己知彼&#xff0c;才能百战不殆测试员想要在竞争激烈的职场中拥有一席之地&#xff0c;就需要提前做好准备。前人栽树&#xff0c;后人乘凉一次面试就能入职自己心仪的公司&#xff0c;就需要通过“前人”积累的面试题来了解面试官的“套路”&#xff0c;通过不断的优化答案…

学考语言成绩c对高考有影响吗_三大影响!考生务必上心,最近正在进行的学考对升学很重要...

阅读关键词&#xff1a;【填报技巧】【新高考】近日(1月6-8日)&#xff0c;高中生们正在进行2021年1月普通高中学业水平合格性考试(也就是大家普遍说的“学考”&#xff0c;又称“合格性考试”)。学考成绩有哪些用途&#xff1f;跟高考录取到底有什么关系&#xff1f;……今天我…

三次握手和四次挥手图解_TCP三次握手和四次挥手详解

作者&#xff1a;雨点的名字来源&#xff1a;https://www.cnblogs.com/qdhxhz/p/8470997.htmlTCP有6种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急)一、TCP三次握手第一次握手客户端向服务器发出连接请求报文&#xff0c;这时报文首部中的同部位SYN1…

ubuntu修改新增用户的目录_Linux 用户、用户组添加修改删除(ubuntu、centos)

一、LINUX(UBUNTU/CENTOS)用户添加删除修改1、建用户&#xff1a;adduser web #新建web用户useradd web #添加web 用户passwd web #给web用户设置密码useradd web -g admin -n -m #新建web用户并指定用户组为 admin用户组,并自动建立登录目录passwd web #给web 用户设置密码use…

读excel_基础 | Excel中单元格的引用方式,读这篇就够了!

最近推送了几个Excel中最难的函数&#xff0c;哀嚎遍野&#xff0c;太难了……所以今天我们来“从万丈高楼平地起”的平地讲起&#xff01;搞懂Excel单元格引用方式&#xff0c;是保证公式准确最最基本的条件&#xff01;单元格引用方式整体分三种&#xff1a;相对引用(A1)绝对…

天融信防火墙重置配置_天融信防火墙配置手册

天融信防火墙配置指南一、对象与规则现在大多防火墙都采用了面向对象的设计。针对对象的行为进行的快速识别处理&#xff0c;就是规则。比如&#xff1a;甲想到A城市B地点。由这个行为就可以制定一些规则进行约束&#xff0c;例如&#xff1a;1)用户身份识别&#xff0c;是不是…

32汇编语言程序说明_Linux 汇编语言学习--编译和链接

上次我们提到了汇编语言的两种格式&#xff0c;Intel 和 AT&T 格式&#xff0c;今天讲的是对应两种编译器的一些使用。我们知道&#xff0c;编译器就是一个将一种程序语言翻译成另外一种语言的程序。编译的过程其实共有5个流程&#xff1a;词法分析、语法分析、语义分析和中…

占用系统资源测试_高频性能测试面试题15道

1、解释常用的性能指标名称与具体含义性能测试 通过测试工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试。验证软件系统是否能够达到用户提出的性能指标&#xff0c;发现系统中存在的性能瓶颈并加以优化。性能指标分为两个方面&#xff1a;系统指标&#…

ensp1.3.00.100用哪个virtualbox_virtualBox使用 Ubuntu18.0.4

一、视图进入缩放模式&#xff0c;虚拟机上方菜单栏无法显示&#xff1f;热键c&#xff0c;恢复。 热键默认为右边的ctrl键。开启增强功能&#xff1f;打开虚拟机后&#xff0c;点击上方设备-->安装增强功能。虚拟机里面会出现识别到光盘。先挂载光盘到指定路径&#xff1a;…

动态ram依靠什么存储信息_处理器内存系统1(ROM,RAM,数据存储顺序)

本篇文章主要介绍处理器中存储器&#xff1a;ROM和RAM以及数据在内存中的存储顺序&#xff1a;大/小端(Little/Big Endian)。只读存储器(ROM)ROM(Read Only Memory)用来存储和保存数据。ROM数据不能随意更新&#xff0c;但是在任何时候都可以读取。即使是断电&#xff0c;ROM也…

python中row的用法_关于Python中openpyxl使用iter_rows()的方法

之前已经对iter函数的用法有过讲解,记忆遗忘的小伙伴可以重新回顾一遍。今天就iter函数的拓展,讲讲openpyxl中导入iter_rows()的方法。 当我们使用以下代码: import openpyxl as op ms = op.load_workbook(mtest.xlsx) ws = ms.active op.worksheet.Worksheet.iter_rows() 然…

市直系统推荐市级以上表彰的_推荐市级以及以上教学方面表彰的细则

推荐市级以及以上教学方面表彰的细则为了客观、公正、合理地评价教师的德、才表现和工作实绩&#xff0c;用制度来激励、督促全体教职工提高政治和业务索质&#xff0c;认真履行好自身工作职责。避免人为因素&#xff0c;增强评优的透明度&#xff0c;有利于调动广大教职工工作…

react全局状态管理_react状态管理redux

Redux(上)结合阮老师的技术博客&#xff0c;将自己吸收到的内容做了个整理&#xff1a;曾经有人说过这样一句hua : 如果你不知道是否需要Redux&#xff0c;那就是不需要它。从组建层面考虑&#xff0c;什么样子的需要redux&#xff1b;某个组件的状态需要共享&#xff0c;某个状…