v2.5.0-beta.1

master
git 8 years ago
parent a5a7a7d694
commit 7a3af5e0e6

@ -1,248 +1,35 @@
# vue-upload-component # vue-upload-component
> Vue.js file upload component, Support for multiple file uploads, progress, html4, ie9 > Vue.js file upload component
**Html4 does not support the progress bar, file size, accept, timeout, headers, response status code error of judgment** - [x] Multi-file upload
- [x] Upload directory
- [x] Drag and drop
- [x] Drag the directory
## Install - [x] Upload multiple files at the same time
- [x] html4 (IE 9)
``` bash - [x] `PUT` method
npm install vue-upload-component --save - [x] Customize the filter
``` - [x] thumbnails
### HTML
```html > Vue.js 文件上传组建
<!DOCTYPE html> - [x] 上传多文件
<html> - [x] 上传目录
<head> - [x] 拖拽
<meta charset="utf-8"> - [x] 拖拽目录
<title>Vue-upload-component Test</title> - [x] 多线程
<script src="https://unpkg.com/vue"></script> - [x] html4(IE 9)
<script src="https://unpkg.com/vue-upload-component"></script> - [x] `PUT` 方法
</head> - [x] 自定义过滤器
<body> - [x] 缩略图
<div id="app">
<file-upload v-model="files" # 演示 (Example)
post-action="/post.method"
put-action="/put.method">Upload file
</file-upload>
</div>
<script>
new Vue({
el: '#app',
data: function() {
return {
files: []
}
},
components: {
FileUpload: VueUploadComponent
}
});
</script>
</body>
</html>
```
### CommonJS
```js
var FileUpload = require('vue-upload-component');
new Vue({
template: '<file-upload v-model="files" post-action="/post.method" put-action="/put.method">Upload file</file-upload>',
data: function() {
return {
files: []
}
},
components: {
FileUpload: FileUpload
}
})
```
### ES6
```js
import FileUpload from 'vue-upload-component'
new Vue({
template: '<file-upload v-model="files" post-action="/post.method" put-action="/put.method">Upload file</file-upload>',
data() {
return {
files: []
}
},
components: {
FileUpload
}
})
```
### SSR (Server)
```js
import FileUpload from 'vue-upload-component/src'
```
#### webpack.config.js
```js
var nodeExternals = require('webpack-node-externals');
{
//.....
externals: [
nodeExternals({whitelist:[/^vue-upload-component/]})
]
//.....
}
```
## Examples
https://lian-yue.github.io/vue-upload-component/ https://lian-yue.github.io/vue-upload-component/
https://github.com/lian-yue/vue-upload-component/tree/2.0/example/ # 文档 (Documents)
``` html
<div id="app">
<file-upload v-model="files" post-action="/post.method" put-action="/put.method">Upload file</file-upload>
</div>
<script type="text/javascript">
var FileUpload = require('vue-upload-component');
new Vue({
el:'#app',
data() {
return {
files: [],
}
},
components: {
FileUpload: FileUpload,
},
});
</script>
```
## Build Setup
``` bash
# install dependencies
npm install
# serve with hot reload at localhost:8080
npm run dev
# build for production with minification
npm run build
```
# Setting
## Props
``` html
<file-upload
name="post file name"
drop="Boolean (true = $parent) or Element or Css Selector"
dropDirectory="true or false"
extensions="Array or String or Regular"
post-action="./post.method"
put-action="./put.method"
accept="accept"
multiple="true or false"
directory="true or false"
size="max Size"
timeout="3600000"
headers="Request headers object"
data="Request data object"
thread="Number (Multi-file uploads at the same time)"
v-model="files"
@input="Function(files)"
@input-file="Function(newFile, oldFile)"
>
Add Files
</file-upload>
```
### Props value
``` js
[
{
id: 'String', // Read only
name: 'filename String',
size: 'filesize Number', // -1 = html4
progress: 'progress String', // Read only
speed: "Speed Number", // Read only
active: 'active Boolean', // set active = fasle abort upload
error: 'error String', // Read only
success: 'success Boolean', // Read only
response: 'Response data Object or String', // Read only
putAction: 'String uri',
postAction: 'String uri',
timeout: "Number",
headers: {
"X-Csrf-Token": "xxxx",
},
data: {
"_csrf_token": "xxxxxx",
},
xhr: "False or XMLHttpRequest object", // html5
iframe: "False or Element object", // html4
file: "undefined or File object" // html5
el: "undefined or Input object"
}
]
```
## data
``` js
{
mode: 'html5', // html5 or html4
active: false, // set active = false abort upload
uploaded: true, // Read only
dropActive: false, // Read only
destroy: false, // Read only Component destroy = true
}
```
**[中文文档](https://github.com/lian-yue/vue-upload-component/tree/2.0/docs/zh-cn/README.md)**
## methods **[English document](https://github.com/lian-yue/vue-upload-component/tree/2.0/docs/en/README.md)**
````
clear()
get(id or file Object)
add(window.File Object or object)
update(id or file Object, data)
remove(id or file Object)
```

12764
dist/example.js vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -96,6 +96,7 @@ table th,table td {
:drop="drop" :drop="drop"
:dropDirectory="dropDirectory" :dropDirectory="dropDirectory"
v-model="files" v-model="files"
@input-filter="inputFilter"
@input-file="inputFile" @input-file="inputFile"
ref="upload"> ref="upload">
Add upload files Add upload files
@ -103,7 +104,8 @@ table th,table td {
</td> </td>
<td> <td>
<button @click.prevent="addDirectory">Add upload directory</button> <button @click.prevent="addDirectory">Add upload directory</button>
<br/>Only support chrome <br/>
<span v-show="$refs.upload && !$refs.upload.features.directory">Your browser does not support</span>
</td> </td>
<td> <td>
<button v-show="!$refs.upload || !$refs.upload.active" @click.prevent="$refs.upload.active = true" type="button">Start upload</button> <button v-show="!$refs.upload || !$refs.upload.active" @click.prevent="$refs.upload.active = true" type="button">Start upload</button>
@ -168,6 +170,9 @@ table th,table td {
<div v-show="$refs.upload && $refs.upload.dropActive" class="drop-active"> <div v-show="$refs.upload && $refs.upload.dropActive" class="drop-active">
Drop ing Drop ing
</div> </div>
<br/>
<br/>
<button type="button" @click.prevent="files = []">Test overwrite files</button>
</main> </main>
</template> </template>
@ -188,6 +193,7 @@ export default {
// extensions: ['gif', 'jpg', 'jpeg','png', 'webp'], // extensions: ['gif', 'jpg', 'jpeg','png', 'webp'],
// extensions: /\.(gif|jpe?g|png|webp)$/i, // extensions: /\.(gif|jpe?g|png|webp)$/i,
multiple: true, multiple: true,
directory: false, directory: false,
drop: true, drop: true,
@ -196,9 +202,7 @@ export default {
name: 'file', name: 'file',
postAction: './post.php', postAction: './post.php',
// postAction: 'http://upload.qiniu.com/',
putAction: './put.php', putAction: './put.php',
// putAction: '',
headers: { headers: {
"X-Csrf-Token": "xxxx", "X-Csrf-Token": "xxxx",
@ -210,6 +214,14 @@ export default {
auto: false, auto: false,
// headers: {},
// putAction: '',
// postAction: 'http://upload.qiniu.com/',
// accept: 'image/png,image/gif,image/jpeg,image/webp',
// extensions: '',
// size: 0,
} }
}, },
@ -225,6 +237,11 @@ export default {
// add Directory // add Directory
addDirectory() { addDirectory() {
if (!this.$refs.upload.features.directory) {
return
}
this.$refs.upload.$el.onclick = null
this.directory = true this.directory = true
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.upload.$el.querySelector('input').click() this.$refs.upload.$el.querySelector('input').click()
@ -240,24 +257,31 @@ export default {
}, },
// File Event // event Filter
inputFile(newFile, oldFile) { inputFilter(newFile, oldFile, prevent) {
if (newFile && !oldFile) { if (newFile && !oldFile) {
// console.log('add', newFile) // or
if (/(\/|^)(Thumbs\.db|desktop\.ini|\..+)$/.test(newFile.name)) {
return prevent()
}
// php html js
if (/\.(php5?|html?|jsx?)$/i.test(newFile.name)) {
return prevent()
}
// // blob
newFile.blob = ''
var URL = window.URL || window.webkitURL var URL = window.URL || window.webkitURL
if (URL && URL.createObjectURL) { if (URL && URL.createObjectURL) {
newFile = this.$refs.upload.update(newFile, {blob: URL.createObjectURL(newFile.file)}) newFile.blob = URL.createObjectURL(newFile.file)
} }
// post filename
newFile.data.name = newFile.name
} }
},
// add, update, remove File Event
inputFile(newFile, oldFile) {
if (newFile && oldFile) { if (newFile && oldFile) {
// console.log('update', newFile, oldFile) // console.log('update', newFile, oldFile)
@ -266,7 +290,7 @@ export default {
// min size // min size
if (newFile.size >= 0 && newFile.size < 100 * 1024) { if (newFile.size >= 0 && newFile.size < 100 * 1024) {
newFile = this.$refs.upload.update(newFile, {error: 'size'}) // newFile = this.$refs.upload.update(newFile, {error: 'size'})
} }
} }
@ -294,7 +318,7 @@ export default {
// //
if (this.auto && !this.$refs.upload.uploaded && !this.$refs.upload.active) { if (newFile && !oldFile && this.auto && !this.$refs.upload.active) {
this.$refs.upload.active = true this.$refs.upload.active = true
} }
}, },

@ -5,7 +5,6 @@
put-action="/put" put-action="/put"
:value="files" :value="files"
@input="input" @input="input"
@input-file="inputFile"
ref="upload"> ref="upload">
Add upload files Add upload files
</file-upload> </file-upload>

@ -2,7 +2,7 @@ import Vue from 'vue'
import Vuex from 'vuex' import Vuex from 'vuex'
Vue.use(Vuex) // Vue.use(Vuex)
const state = { const state = {

@ -6,7 +6,9 @@
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
<script src="https://unpkg.com/es6-promise@4.1.0/dist/es6-promise.auto.min.js"></script> <script src="https://unpkg.com/es6-promise"></script>
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/vuex"></script>
<script src="./dist/example.js"></script> <script src="./dist/example.js"></script>
</body> </body>
</html> </html>

@ -1,7 +1,7 @@
{ {
"name": "vue-upload-component", "name": "vue-upload-component",
"description": "Vue.js file upload component, Support for multiple file uploads, progress, html5, html4, support ie9", "description": "Vue.js file upload component, Support for multiple file uploads, progress, html5, html4, support ie9",
"version": "2.4.0-beta.11", "version": "2.5.0-beta.1",
"author": "LianYue", "author": "LianYue",
"scripts": { "scripts": {
"dev": "webpack-dev-server --inline --hot", "dev": "webpack-dev-server --inline --hot",
@ -45,12 +45,9 @@
"file-loader": "^0.8.4", "file-loader": "^0.8.4",
"json-loader": "^0.5.4", "json-loader": "^0.5.4",
"url-loader": "^0.5.7", "url-loader": "^0.5.7",
"vue": "^2.2.6",
"vue-hot-reload-api": "^1.3.3", "vue-hot-reload-api": "^1.3.3",
"vue-loader": "^11.1.4", "vue-loader": "^11.1.4",
"vue-router": "^2.4.0",
"vue-template-compiler": "^2.2.6", "vue-template-compiler": "^2.2.6",
"vuex": "^2.3.1",
"webpack": "^1.12.2", "webpack": "^1.12.2",
"webpack-dev-server": "^1.12.0" "webpack-dev-server": "^1.12.0"
} }

File diff suppressed because it is too large Load Diff

@ -5,9 +5,10 @@
:id="$parent.inputId || $parent.name" :id="$parent.inputId || $parent.name"
:accept="$parent.accept" :accept="$parent.accept"
@change="change" @change="change"
:webkitdirectory="$parent.directory && $parent.mode === 'html5'" :webkitdirectory="$parent.directory && $parent.features.directory"
:directory="$parent.directory && $parent.mode === 'html5'" :directory="$parent.directory && $parent.features.directory"
:multiple="$parent.multiple && $parent.mode === 'html5'" :allowdir="$parent.directory && $parent.features.directory"
:multiple="$parent.multiple && $parent.features.html5"
/> />
</template> </template>
<script> <script>

@ -19,6 +19,11 @@ module.exports = {
extensions: ['', '.js', '.vue', '.json'], extensions: ['', '.js', '.vue', '.json'],
}, },
externals: {
vue: 'Vue',
vuex: 'Vuex',
},
module: { module: {
loaders: [ loaders: [
{ {
@ -55,6 +60,7 @@ module.exports = {
}, },
devServer: { devServer: {
// host: '172.16.23.1',
historyApiFallback: true, historyApiFallback: true,
noInfo: true noInfo: true
}, },

Loading…
Cancel
Save