|
@@ -1,237 +1,54 @@
|
|
|
# Uploader 上传
|
|
# Uploader 上传
|
|
|
|
|
|
|
|
-> 文件上传组件
|
|
|
|
|
|
|
+### 介绍
|
|
|
|
|
|
|
|
-### 基本用法
|
|
|
|
|
|
|
+用于将本地的图片或文件上传至服务器。
|
|
|
|
|
+
|
|
|
|
|
+### 安装
|
|
|
|
|
|
|
|
``` javascript
|
|
``` javascript
|
|
|
import { createApp } from 'vue';
|
|
import { createApp } from 'vue';
|
|
|
-import { Button } from '@nutui/nutui';
|
|
|
|
|
|
|
+import { Uploader } from '@nutui/nutui';
|
|
|
|
|
|
|
|
const app = createApp();
|
|
const app = createApp();
|
|
|
-app.use(Button);
|
|
|
|
|
|
|
+app.use(Uploader);
|
|
|
|
|
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-```html
|
|
|
|
|
-<nut-uploader
|
|
|
|
|
- name="uploader-demo"
|
|
|
|
|
- :url="url"
|
|
|
|
|
- :isPreview="true"
|
|
|
|
|
- :acceptType = "['image/jpeg', 'image/png', 'image/gif', 'image/bmp']"
|
|
|
|
|
- @start="onStart"
|
|
|
|
|
- @success="onSuccess"
|
|
|
|
|
- @fail="onFail"
|
|
|
|
|
- @progress="onProgress"
|
|
|
|
|
- @preview="onPreview"
|
|
|
|
|
- @showMsg="showMsgFn"
|
|
|
|
|
- typeError="对不起,不支持上传该类型文件!"
|
|
|
|
|
- limitError="对不起,文件大小超过限制!"
|
|
|
|
|
->
|
|
|
|
|
-上传
|
|
|
|
|
-</nut-uploader>
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-```javascript
|
|
|
|
|
-export default {
|
|
|
|
|
- data() {
|
|
|
|
|
- return {
|
|
|
|
|
- url:'https://my-json-server.typicode.com/linrufeng/demo/posts',
|
|
|
|
|
- };
|
|
|
|
|
- },
|
|
|
|
|
- methods:{
|
|
|
|
|
- onStart(){
|
|
|
|
|
- console.log('上传开始');
|
|
|
|
|
- },
|
|
|
|
|
- onSuccess(file,res){
|
|
|
|
|
- alert('上传成功!');
|
|
|
|
|
- },
|
|
|
|
|
- onFail(file,res){
|
|
|
|
|
- alert('上传失败!');
|
|
|
|
|
- },
|
|
|
|
|
- onProgress(file, loaded, total) {
|
|
|
|
|
- console.log('上传进度:'+parseInt((100 * loaded) / total)+'%');
|
|
|
|
|
- },
|
|
|
|
|
- onPreview(file) {
|
|
|
|
|
- this.previewImg = file;
|
|
|
|
|
- },
|
|
|
|
|
- showMsgFn(msg){
|
|
|
|
|
- alert(msg);
|
|
|
|
|
- },
|
|
|
|
|
- }
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-### 高级用法
|
|
|
|
|
-
|
|
|
|
|
-与吐司 **Toast** 组件结合使用
|
|
|
|
|
-
|
|
|
|
|
-```html
|
|
|
|
|
-<nut-uploader
|
|
|
|
|
- name="uploader-demo"
|
|
|
|
|
- :url="url"
|
|
|
|
|
- @success="onSuccess"
|
|
|
|
|
- @fail="onFail"
|
|
|
|
|
- @showMsg="showMsgFn"
|
|
|
|
|
->
|
|
|
|
|
-上传
|
|
|
|
|
-</nut-uploader>
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-```javascript
|
|
|
|
|
-export default {
|
|
|
|
|
- data() {
|
|
|
|
|
- return {
|
|
|
|
|
- url:'https://my-json-server.typicode.com/linrufeng/demo/posts',
|
|
|
|
|
- };
|
|
|
|
|
- },
|
|
|
|
|
- methods:{
|
|
|
|
|
- onSuccess(file,res){
|
|
|
|
|
- this.$toast.success('上传成功');
|
|
|
|
|
- },
|
|
|
|
|
- onFail(file,res){
|
|
|
|
|
- this.$toast.fail('上传失败!');
|
|
|
|
|
- },
|
|
|
|
|
- showMsgFn(msg){
|
|
|
|
|
- this.$toast.text(msg);
|
|
|
|
|
- },
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-与按钮 **Button** 组件结合使用
|
|
|
|
|
-
|
|
|
|
|
-```html
|
|
|
|
|
-<nut-uploader
|
|
|
|
|
- :name="name"
|
|
|
|
|
- :url="url"
|
|
|
|
|
- >
|
|
|
|
|
- <nut-button small>上传</nut-button>
|
|
|
|
|
-</nut-uploader>
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-自定义 headers & formData 使用
|
|
|
|
|
-```html
|
|
|
|
|
-<nut-uploader
|
|
|
|
|
- :name="name"
|
|
|
|
|
- :url="url"
|
|
|
|
|
- :headers="headers"
|
|
|
|
|
- :attach="formData"
|
|
|
|
|
- >
|
|
|
|
|
- <nut-button small>上传</nut-button>
|
|
|
|
|
-</nut-uploader>
|
|
|
|
|
-```
|
|
|
|
|
-```javascript
|
|
|
|
|
-export default {
|
|
|
|
|
- data() {
|
|
|
|
|
- return {
|
|
|
|
|
- url:'https://my-json-server.typicode.com/linrufeng/demo/posts',
|
|
|
|
|
- name:'testname',
|
|
|
|
|
- headers:{
|
|
|
|
|
- token:'test'
|
|
|
|
|
- },
|
|
|
|
|
- formData:{
|
|
|
|
|
- f1:'test',
|
|
|
|
|
- f2:'test1'
|
|
|
|
|
- },
|
|
|
|
|
- };
|
|
|
|
|
- },
|
|
|
|
|
-}
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-与进度条组件 **Progress** 结合使用
|
|
|
|
|
-
|
|
|
|
|
-```html
|
|
|
|
|
-<nut-uploader
|
|
|
|
|
- :name="name"
|
|
|
|
|
- :url="url"
|
|
|
|
|
- @progress="progress"
|
|
|
|
|
- > 上传
|
|
|
|
|
-</nut-uploader>
|
|
|
|
|
-<nut-progress :percentage="progressNum" :showText="false" strokeWidth="24"/>
|
|
|
|
|
-```
|
|
|
|
|
-预览上传图片
|
|
|
|
|
-```html
|
|
|
|
|
- <nut-uploader
|
|
|
|
|
- :name="name"
|
|
|
|
|
- :url="url"
|
|
|
|
|
- :xhrState="stateNum"
|
|
|
|
|
- :isPreview="true"
|
|
|
|
|
- @success="demoSuccess"
|
|
|
|
|
- @fail="demoFail"
|
|
|
|
|
- @preview="preview"
|
|
|
|
|
- @showMsg="showMsg1"
|
|
|
|
|
- >
|
|
|
|
|
- <nut-button small>上传</nut-button>
|
|
|
|
|
- </nut-uploader>
|
|
|
|
|
-```
|
|
|
|
|
-```js
|
|
|
|
|
-preview(file) {
|
|
|
|
|
- this.previewImg = file;
|
|
|
|
|
-},
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-上传图片前处理图片内容
|
|
|
|
|
-
|
|
|
|
|
-```html
|
|
|
|
|
- <nut-uploader
|
|
|
|
|
- :beforeUpload="test"
|
|
|
|
|
- :name="name"
|
|
|
|
|
- :url="url"
|
|
|
|
|
- :xhrState="stateNum"
|
|
|
|
|
- :acceptType = "['image/jpeg', 'image/png', 'image/gif', 'image/bmp']"
|
|
|
|
|
- @success="demo1Success"
|
|
|
|
|
- @failure="demo1Fail"
|
|
|
|
|
- @start="demo1UploadStart"
|
|
|
|
|
- @showMsg="showMsg"
|
|
|
|
|
- ><nut-button small>上传图片前处理图片内容</nut-button></nut-uploader>
|
|
|
|
|
-```
|
|
|
|
|
-```js
|
|
|
|
|
-test($ev){
|
|
|
|
|
- console.log($ev,'可以处理input选择的内容')
|
|
|
|
|
- return {
|
|
|
|
|
- event:$ev,
|
|
|
|
|
- data:''
|
|
|
|
|
- }
|
|
|
|
|
-},
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-自定义增加上传图片数据
|
|
|
|
|
-```html
|
|
|
|
|
-<nut-uploader
|
|
|
|
|
- :selfData="selfData"
|
|
|
|
|
- :name="name"
|
|
|
|
|
- :url="url"
|
|
|
|
|
- :xhrState="stateNum"
|
|
|
|
|
- :acceptType = "['image/jpeg', 'image/png', 'image/gif', 'image/bmp']"
|
|
|
|
|
- @success="demo1Success"
|
|
|
|
|
- @failure="demo1Fail"
|
|
|
|
|
- @start="demo1UploadStart"
|
|
|
|
|
- @showMsg="showMsg"
|
|
|
|
|
- ><nut-button small>自定义增加上传图片数据</nut-button></nut-uploader>
|
|
|
|
|
-
|
|
|
|
|
-```
|
|
|
|
|
|
|
+## 代码示例
|
|
|
|
|
|
|
|
|
|
+### 基本用法
|
|
|
|
|
|
|
|
|
|
+## API
|
|
|
|
|
|
|
|
### Prop
|
|
### Prop
|
|
|
|
|
|
|
|
| 字段 | 说明 | 类型 | 默认值
|
|
| 字段 | 说明 | 类型 | 默认值
|
|
|
|----- | ----- | ----- | -----
|
|
|----- | ----- | ----- | -----
|
|
|
-| name | input name的名称 | String | ""
|
|
|
|
|
|
|
+| name | `input` 标签 `name` 的名称,发到后台的文件参数名 | String | "file"
|
|
|
| url | 上传服务器的接口地址 | String | -
|
|
| url | 上传服务器的接口地址 | String | -
|
|
|
-| isPreview | 是否需要预览 | Boolean | false
|
|
|
|
|
-| clearInput | 是否需要清空input内容,设为true支持重复选择上传同一个文件 | Boolean | false
|
|
|
|
|
-| maxSize | 可以设定最大上传文件的大小(字节) | Number | 5242880
|
|
|
|
|
-| acceptType | 可以上传文件的类型 | Array | ['image/jpeg', 'image/png', 'image/gif', 'image/bmp']
|
|
|
|
|
-| attach | 附加上传的信息formData | Object | {}
|
|
|
|
|
-| headers | 自定义headers | Object | {}
|
|
|
|
|
|
|
+| default-file-list | 默认已经上传的文件列表 | object[] | -
|
|
|
|
|
+| file-list | 默认已经上传的文件列表 | object[] | -
|
|
|
|
|
+| custom-request | 通过覆盖默认的上传行为,可以自定义自己的上传实现 | Function | -
|
|
|
|
|
+| is-preview | 是否上传成功后展示预览图 | Boolean | true
|
|
|
|
|
+| is-deletable | 是否展示删除按钮 | Boolean | true
|
|
|
|
|
+| method | 上传请求的 http method | String | "post"
|
|
|
|
|
+| capture | 图片[选取模式](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input#htmlattrdefcapture),可选值为 camera (直接调起摄像头) | String | "camera"
|
|
|
|
|
+| max-size | 可以设定最大上传文件的大小(字节) | Number丨String | 5242880 (5M)
|
|
|
|
|
+| max-count | 文件上传数量限制 | Number丨String | 1
|
|
|
|
|
+| clear-input | 是否需要清空`input`内容,设为`true`支持重复选择上传同一个文件 | Boolean | false
|
|
|
|
|
+| accept-type | 允许上传的文件类型,[详细说明](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file#%E9%99%90%E5%88%B6%E5%85%81%E8%AE%B8%E7%9A%84%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B) | String | * ]
|
|
|
|
|
+| headers | 设置上传的请求头部 | Object | {}
|
|
|
|
|
+| form-data | 附加上传的信息 formData | Object | {}
|
|
|
|
|
+| upload-icon | 上传区域[图标名称](#/zh-CN/icon)或图片链接 | String | photograph
|
|
|
| xhrState | 接口响应的成功状态(status)值 | Number | 200
|
|
| xhrState | 接口响应的成功状态(status)值 | Number | 200
|
|
|
-| typeError | 文件类型错误提示文案 | String | "不支持上传该类型文件"
|
|
|
|
|
-| limitError | 文件大小超过限制提示文案 | String | "文件大小超过限制"
|
|
|
|
|
-| xmlError | 浏览器不支持本组件时的提示文案 | String | "对不起,您的浏览器不支持本组件!"
|
|
|
|
|
| withCredentials | 支持发送 cookie 凭证信息 | Boolean | fasle
|
|
| withCredentials | 支持发送 cookie 凭证信息 | Boolean | fasle
|
|
|
-| beforeUpload | 上传前的函数需要返回一个对象 | Function | {event:$event} $event为点击事件必传
|
|
|
|
|
-| selfData | 自定义增加上传的数据 | Object | {}
|
|
|
|
|
|
|
+| multiple | 是否支持文件多选 | Boolean | fasle
|
|
|
|
|
+| disabled | 是否禁用文件上传 | Boolean | fasle
|
|
|
|
|
+| before-upload | 上传前的函数需要返回一个对象 | Function | {event:$event} $event为点击事件必传
|
|
|
|
|
+| before-delete | 除文件时的回调,返回值为 false 时不移除。支持返回一个 Promise 对象,Promise 对象 resolve(false) 或 reject 时不移除 | Function(file): boolean 丨Promise | -
|
|
|
|
|
+| on-change | 上传文件改变时的状态,详见 | Function(fileList) 丨 Promise | -
|
|
|
|
|
+| custom-request | 通过覆盖默认的上传行为,可以自定义自己的上传实现 | Function | -
|
|
|
|
|
|
|
|
### Event
|
|
### Event
|
|
|
|
|
|
|
@@ -239,18 +56,7 @@ test($ev){
|
|
|
|----- | ----- | -----
|
|
|----- | ----- | -----
|
|
|
| start | 文件上传开始 | -
|
|
| start | 文件上传开始 | -
|
|
|
| progress | 文件上传的进度 | 上传文件、已上传数据量、总数据量
|
|
| progress | 文件上传的进度 | 上传文件、已上传数据量、总数据量
|
|
|
-| preview | isPreview为true时可通过此方法获文件的Base64编码,一般用于预览 | 文件的Base64编码
|
|
|
|
|
-| success | 上传成功 | 文件、responseText
|
|
|
|
|
-| failure | 上传失败 | 文件、responseText
|
|
|
|
|
-| showMsg | 组件抛出信息的处理函数 | 组件抛出的提示信息
|
|
|
|
|
|
|
+| oversize | 文件大小超过限制时触发 | fileItem
|
|
|
|
|
+| success | 上传成功 | fileList
|
|
|
|
|
+| failure | 上传失败 | fileList
|
|
|
|
|
|
|
|
-### tips
|
|
|
|
|
-
|
|
|
|
|
-使用 beforeUpload 一定要返回一个JSON 对象且 event 为必传字段
|
|
|
|
|
-```js
|
|
|
|
|
-beforeUpload($e){
|
|
|
|
|
- return {
|
|
|
|
|
- event:$e
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-```
|
|
|