輪子的github鏈接:兩個項目的文檔要結(jié)合著看才可以
# vue-simple-uploader
https://github.com/simple-uploader/vue-uploader/blob/master/README_zh-CN.md
# simple-uploader
https://github.com/simple-uploader/Uploader/blob/develop/README_zh-CN.md#%E9%85%8D%E7%BD%AE
具體使用建議看博客的另外兩篇文章【uploader】
然后如果想要參考博主對該組件的使用的探索過程以及使用情況,可以查看主頁中的uploader的幾篇文章,那是簡單記錄自己對該組件的探索。文章來源地址http://www.zghlxwxcb.cn/news/detail-408729.html
1.vue-simple-uploader介紹
超級強大的上傳文件的前端vue組件,相比elementui的upload組件,其能滿足絕大多數(shù)的文件上傳需求。包括斷續(xù)重傳等常見業(yè)務(wù)。而elementui的upload組件很多功能都不能實現(xiàn)。但是兩者可以相互兼容著使用。
- 支持文件、多文件、文件夾上傳
- 支持拖拽文件、文件夾上傳
- 可暫停、繼續(xù)上傳
- 支持?jǐn)帱c續(xù)傳、秒傳
- 支持進度、預(yù)估剩余時間、出錯自動重試、重傳等操作
- 上傳隊列管理,支持最大并發(fā)上傳,支持分塊上傳
為了方便查看,這里copy一下quickstart代碼,uploader只有這幾個標(biāo)簽,但是會有很多屬性和方法。
<template>
<uploader :options="options" class="uploader-example">
<uploader-unsupport></uploader-unsupport>
<uploader-drop>
<p>Drop files here to upload or</p>
<uploader-btn>select files</uploader-btn>
<uploader-btn :attrs="attrs">select images</uploader-btn>
<uploader-btn :directory="true">select folder</uploader-btn>
</uploader-drop>
<uploader-list></uploader-list>
</uploader>
</template>
<script>
export default {
data () {
return {
options: {
// https://github.com/simple-uploader/Uploader/tree/develop/samples/Node.js
target: '//localhost:3000/upload',
testChunks: false
},
attrs: {
accept: 'image/*'
}
}
}
}
</script>
<style>
.uploader-example {
width: 880px;
padding: 15px;
margin: 40px auto 0;
font-size: 12px;
box-shadow: 0 0 10px rgba(0, 0, 0, .4);
}
.uploader-example .uploader-btn {
margin-right: 4px;
}
.uploader-example .uploader-list {
max-height: 440px;
overflow: auto;
overflow-x: hidden;
overflow-y: auto;
}
</style>
2.安裝和配置
npm install vue-simple-uploader --save
# 在main.js中
import uploader from 'vue-simple-uploader'
Vue.use(uploader)
3. 組件標(biāo)簽的文檔整理
一共有如下幾個標(biāo)簽:
-
uploader
-
uploader-btn
-
uploader-drop
-
uploader-list
-
uploader-file
3.1 uploader標(biāo)簽
根組件標(biāo)簽,可理解為一個上傳器
Props屬性:
參數(shù) | 說明 | 類型 | 可選值 | 默認 |
---|---|---|---|---|
options | 最重要的配置項,讀取配置項后建立上傳器 | Object | - | {} |
autoStart | 是否選擇后就立即自動上傳 | boolean | true/false | true |
fileStatusText | 根據(jù)服務(wù)端返回的狀態(tài)碼做出反應(yīng),默認即可 | Object | - | { success: ‘success’, error: ‘error’, uploading: ‘uploading’, paused: ‘paused’, waiting: ‘waiting’ } |
補充options的可配置項【常用的優(yōu)先,△標(biāo)記為重要,其他沒寫的都是默認為最優(yōu)】:
參數(shù) | 說明 | 類型 | 可選值 | 默認 |
---|---|---|---|---|
△target | 目標(biāo)上傳的url,必填 | String | - | ‘/’ |
△singleFile | 單文件上傳,如果設(shè)置了true,則選擇多個文件的時候,只有最后一個會被上傳 | boolean | true/false | false |
△chunkSize | 分塊,單個數(shù)據(jù)塊的值大小,用于分塊上傳實現(xiàn)斷續(xù)重傳 | number | - | 1*1024*1024【1Mb】 |
forceChunkSize | 是否強制所有的塊都一定小于等于chunkSize | boolean | - | false |
△simultaneousUploads | 并發(fā)上傳數(shù) | number | - | 3 |
fileParameterName | 上傳文件的時候文件的參數(shù)名,默認是multipart上傳,參數(shù)名默認是file | String | - | “file” |
△query | 請求url時候攜帶的其他參數(shù) | json | - | {} |
headers | 設(shè)置請求頭信息 | json | - | {} |
△withCredentials | 標(biāo)準(zhǔn)的CORS請求是不會帶上cookie的,如果想要帶上需要設(shè)置為true | boolean | true/false | false |
method | 當(dāng)前上傳文件使用的方式,默認與form表單一樣multipart | String | multipart/octet | “multipart” |
testMethod | 測試接口的時候使用的HTTP方法 | String | “GET”/“POST” | 默認"GET" |
△uploadMethod | 真正上傳的時候使用的 HTTP 方法 | String | “GET”/“POST” | 默認"POST" |
prioritizeFirstAndLastChunk | 對于文件而言是否高優(yōu)先級發(fā)送第一個和最后一個塊。一般用來發(fā)送到服務(wù)端,然后判斷是否是合法文件;例如圖片或者視頻的 meta 數(shù)據(jù)一般放在文件第一部分,這樣可以根據(jù)第一個塊就能知道是否支持 | boolean | true/false | false |
△testChunks | 是否測試每個塊是否在服務(wù)端已經(jīng)上傳了,主要用來實現(xiàn)秒傳、跨瀏覽器上傳等【一般默認】 | boolean | true/false | true |
△checkChunkUploadedByResponse | 值為一個函數(shù),不可以直接編寫函數(shù)。是服務(wù)器分片校驗函數(shù),與上方的testChunks共用,是秒傳和斷點續(xù)傳的基礎(chǔ)。根據(jù)結(jié)果返回的響應(yīng)體參數(shù)判斷,return true或者false | 函數(shù) | ||
maxChunkRetries | 最大重試次數(shù) | number | - | 0 |
chunkRetryInterval | 重試間隔,null表示立即重試 | number | - | null |
△processParams | 直接在options對象中編寫名為processParams函數(shù)即可。自定義每一次分片傳給后臺的參數(shù),params是該方法返回的形參,包含分片信息。實際情況根據(jù)接口約定調(diào)整,返回一個json對象 | 函數(shù) |
Slot事件:
name | 說明 |
---|---|
file-added(file) | 添加了一個文件的事件,一般用作文件校驗 |
files-added(files, fileList) | 添加了一批文件事件,一般用做一次選擇的多個文件進行校驗 |
file-success(rootFile, file, message, chunk) | 文件成功上傳,第一個參數(shù)rootFile是或包含F(xiàn)ile對象,file是File對象,message是服務(wù)端響應(yīng)內(nèi)容字符串,chunk是chunk實例,應(yīng)該是本文件最后一個塊實例。chunk.xhr.status就是這個文件上傳的響應(yīng)碼 |
file-progress(rootFile, file, chunk) | 一個文件正在上傳事件 |
file-removed(file) | 一個文件被移除 |
file-error(rootFile, file, message, chunk) | 文件上傳過程出錯 |
methods方法:
需要得到uploader實例
# 我們先給uploader標(biāo)簽指定ref
<uploader :options="options" class="uploader-example" ref="uploader">
# 然后可以從當(dāng)前vue組件的子組件refs列表里獲取uploader組件,uploader組件有個uploader屬性表示uploader組件本身
const uploaderInstance = this.$refs.uploader.uploader
# 然后實例.方法就可以使用了
方法 | 說明 |
---|---|
upload() | 開始或者繼續(xù)上傳 |
pause() | 暫停上傳 |
resume() | 繼續(xù)上傳 |
progress() | 返回一個0-1的浮點數(shù),表示當(dāng)前上傳進度 |
isUploading() | 返回一個布爾值標(biāo)示是否還有文件正在上傳中 |
cancel() | 文件會被移除掉 |
addFile(file) | 添加一個原生的文件對象到上傳列表中 |
removeFile(file) | 從上傳列表中移除一個指定的 Uploader.File 實例對象 |
getSize() | 上傳文件的總大小 |
timeRemaining() | 剩余時間,單位秒;這個是基于平均上傳速度計算出來的,如果說上傳速度為 0,那么這個值就是 Number.POSITIVE_INFINITY
|
on(event, callback) | 監(jiān)聽各種事件 |
3.2 uploader-btn標(biāo)簽
點擊后能夠展示文件選擇器的按鈕。一般就只使用directory參數(shù)
props屬性:
參數(shù) | 說明 | 類型 | 可選值 | 默認 |
---|---|---|---|---|
directory | 表示當(dāng)前上傳是否是文件夾上傳,如果true則只能選擇文件夾 | boolean | true/false | false |
single | 表示是否一次只能選擇一個文件,如果false則可以多選 | boolean | true/false | false |
attrs | 添加到input元素上的額外屬性。因為文件上傳的本質(zhì)是一個input文檔對象,比如input元素有的accept="image/*"表示只允許圖片上傳 | json object | accept等 | {} |
3.3 uploader-drop標(biāo)簽
聲明該區(qū)域允許拖動文件進來后上傳
3.4 uploader-list標(biāo)簽
一個列表外標(biāo)簽,類似于form一樣,僅僅是用來裝載uploader-file組件的容器。
下面有使用演示
3.5 uploader-file標(biāo)簽
就是你拉取后的一個文件單位對象,可以展示,擁有自己的很多屬性可以展示。
Props屬性:
參數(shù) | 說明 | 類型 | 可選值 | 默認 |
---|---|---|---|---|
file | file實例本身 | Uploader.File | - | - |
list | 如果在UploaderList使用,設(shè)置為true | boolean | false |
slot插槽:就是通過file對象能直接的file信息
參數(shù) | 說明 | 類型 |
---|---|---|
file | 文件實例 | Uploader.File |
list | 是否在 UploaderList 組件中使用 |
boolean |
status | 當(dāng)前狀態(tài)【success,error,uploading,paused,waiting】 | String |
paused | 是否暫停了 | boolean |
error | 是否出錯了 | boolean |
averageSpeed | 平均上傳速度,單位字節(jié)每秒 | number |
formatedAverageSpeed | 格式化后的平均上傳速度類似:3 KB / S
|
String |
currentSpeed | 當(dāng)前上傳速度 | number |
isComplete | 是否已經(jīng)上傳完成 | boolean |
isUploading | 是否在上傳中 | boolean |
size | 文件或者文件夾大小 | number |
formatedSize | 格式化后文件或者文件夾大小,類似:10 KB
|
number |
uploadedSize | 已經(jīng)上傳大小,單位字節(jié) | number |
progress | 介于 0 到 1 之間的小數(shù),上傳進度 | number |
progressStyle | 進度樣式,transform 屬性,類似:{transform: '-50%'}
|
String |
progressingClass | 正在上傳中的時候值為:uploader-file-progressing
|
String |
timeRemaining | 預(yù)估剩余時間,單位秒 | number |
formatedTimeRemaining | 格式化后剩余時間,類似:3 miniutes
|
String |
type | 文件類型 | String |
extension | 文件名后綴,小寫 | String |
fileCategory | 文件分類,其中之一:folder , document , video , audio , image , unknown
|
String |
簡單演示一下list和file的使用,用于可視化文件上傳進度
- uploader設(shè)置自動上傳為false: `autoStart=“false”
- 在uploader內(nèi)引入uploader-list
- 通過slot-scope綁定文件實例,選擇文件后自動傳遞實例
- v-for展示uploader-file即可,file實例的屬性、方法和事件看上方文檔,自己設(shè)計可視化即可
<uploader
:options="this.options"
@file-added="this.fileAdded"
@file-error="this.fileError"
@file-success="this.fileSuccess"
:autoStart="false">
<uploader-unsupport></uploader-unsupport>
<uploader-btn class="uploader-btn">點擊上傳</uploader-btn>
<uploader-list>
<!--通過slot-scope綁定文件實例-->
<div slot-scope="props">
<div v-for="(file,i) in props.fileList" :key="i">
<uploader-file :list="true" :file="file"></uploader-file>
</div>
</div>
</uploader-list>
</uploader>
原生的效果長這樣。
3.6 uploader-unsopport標(biāo)簽
不支持 HTML5 File API 的時候會顯示。
一般就寫在uploader根組件里就行了,遇到低版本的瀏覽器不兼容組件的時候才會展示。
<uploader :options="options" class="uploader-example">
<uploader-unsupport></uploader-unsupport>
</uploader>
4.請求中的參數(shù)
可通過 query 參數(shù)配置擴充,也可以通過 processParams 自定義文章來源:http://www.zghlxwxcb.cn/news/detail-408729.html
- chunkNumber,當(dāng)前分片
- chunkSize,分片上限大小
- currentChunkSize,當(dāng)前分片的真實大小
- totalSize,文件總大小
- identifier,唯一標(biāo)識,可自定義
- filename,文件名
- totalChunks,總分片數(shù)量
- 從totalChunks往下,是自己在options配置中配置的query參數(shù),比如我配置了curUrl這個參數(shù)
然后如果想要參考博主對該組件的使用的探索過程以及使用情況,可以查看主頁中的uploader的幾篇文章,那是簡單記錄自己對該組件的探索。
到了這里,關(guān)于【uploader】表格化自整理vue-simple-uploader的文檔(超詳細)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!