UNPKG

@tinyuploader/vue

Version:

```bash npm i @tinyuploader/vue -S ```

225 lines (204 loc) 5.27 kB
# Quick Start ## 安装 ```bash npm i @tinyuploader/vue -S ``` ## 使用 ```javascript // main.js import Vue from 'vue' import App from './App.vue' import Uploader from '@tinyuploader/vue' import '@tinyuploader/vue/dist/style.css' Vue.use(Uploader) new Vue({ render: (h) => h(App) }).$mount('#app') ``` ```vue <template> <div style="display: flex; gap: 20px"> <Uploader ref="uploaderRef" class="tiny-uploader" v-bind="option" :defaultFileList="defaultFileList" @onExceed="onExceed" @onFileAdded="onFileAdded" @onFilesAdded="onFilesAdded" @onChange="onChange" @onFileRemove="onFileRemove" @onFileProgress="onFileProgress" @onFileUploadSuccess="onFileUploadSuccess" @onSuccess="onSuccess" @onFail="onFail" @onAllFileSuccess="onAllFileSuccess" @onClick="onClick"></Uploader> <div style="width: 500px; flex: 1"> <el-form size="small"> <el-form-item> <el-button @click="clear" type="primary">取消所有上传</el-button> <el-button v-if="!option.autoUpload" @click="submit" type="primary">手动提交</el-button> </el-form-item> <el-form-item label="data.userId"> <el-input v-model="option.data.userId" placeholder="自定义data" clearable /> </el-form-item> </el-form> </div> </div> </template> <script> const customOption = { // input 属性相关 drag: true, accept: '*', multiple: true, // 文件相关 limit: 4, autoUpload: true, customGenerateUid: null, beforeAdd: (file) => { if (file.name.endsWith('.js')) { file.setErrorMessage('不允许上传js文件') return false } }, beforeRemove: () => true, addFailToRemove: false, // 默认为false chunkSize: 2 * 1024 * 1024, // 2M fakeProgress: true, withHash: true, useWebWoker: false, // 上传逻辑相关 name: 'file', action: 'http://localhost:3000/file/upload', customRequest: null, withCredentials: true, // headers 支持对象或函数两种形式 // 对象形式:静态 headers // headers: { // 'X-Requested-With': 'xxxx-xx-xxxx', // 'Authorization': 'Bearer token' // }, // 函数形式:动态 headers,根据文件信息返回 headers: () => ({ 'X-Requested-With': 'xxxx-xx-xxxx', 'X-Upload-Time': new Date().toISOString() }), // data 支持对象或函数两种形式 // 对象形式:静态额外参数 data: { userId: '12345', token: 'static-token' }, // 函数形式:动态额外参数,根据文件信息返回 // data: () => ({ // userId: '12345', // uploadTime: Date.now() // }), requestSucceed: (xhr) => [200, 201, 202, 206].includes(xhr.status), maxConcurrency: 6, maxRetries: 3, retryInterval: 1000, checkRequest: async ({ hash, name: filename }, customData) => { const { data } = await request({ url: '/check', method: 'get', params: { hash, filename, ...customData, status: 'none' } }) return data }, mergeRequest: async ({ hash, name: filename }, customData) => { const { data } = await request({ url: '/merge', method: 'get', params: { hash, filename, ...customData, status_error: Math.random() > 0.5 ? 'error' : undefined } }) return data }, processData: (data) => data, customStatus: {} } export default { data() { return { defaultFileList: [], fileList: [], option: customOption } }, mounted() { setTimeout(() => { this.defaultFileList = [ { id: '222', name: '哈哈', url: 'http://baidu.com' } ] }, 500) }, methods: { clear() { this.$refs.uploaderRef.clear() }, submit() { this.$refs.uploaderRef.submit() }, onChange(file, fileList) { this.fileList = fileList }, onExceed(selectedFiles) { console.log('onExceed', selectedFiles) }, onFileAdded(file, fileList) { console.log('onFileAdded', file, fileList) }, onFilesAdded(fileList) { console.log('onFilesAdded', fileList) }, onFileRemove(file, fileList) { console.log('onFileRemove', file, fileList) }, onFileProgress(file, fileList) { console.log('onFileProgress', file, fileList) }, onFileUploadSuccess() {}, onSuccess(file, fileList) { console.log('onSuccess', file, fileList) }, onFail(file, fileList) { console.log('onFail', file, fileList) }, onAllFileSuccess(fileList) { console.log('onAllFileSuccess', fileList) }, onClick(file) { console.log('onPreview', file.name, file.url) } } } </script> <style lang="scss"> .tiny-uploader { flex: 1; --tiny-color-primary: #1dce9f; } </style> ``` ## [Read Document](https://moyuderen.github.io/uploader/vue/quick-start.html) ## [Server Mock](https://moyuderen.github.io/tiny-uploader-server/zh/) ## [Change Log](https://github.com/moyuderen/tiny-uploader-vue-legacy/blob/main/CHANGELOG.md) ## Demo 展示 - [线上展示](https://codepen.io/moyuderen/full/XWLMMKN) - [具体代码](https://codepen.io/moyuderen/pen/XWLMMKN)