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.pswp.cn/news/530191.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530191.shtml
英文地址,請注明出處:http://en.pswp.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;某個狀…