|
|
8 years ago | |
|---|---|---|
| .. | ||
| README.md | 8 years ago | |
README.md
The document uses Google Translate
Install
npm install
npm install vue-upload-component --save
const VueUploadComponent = require('vue-upload-component')
Vue.component('file-upload', VueUploadComponent)
html install
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/vue-upload-component"></script>
<script>
Vue.component('file-upload', VueUploadComponent)
</script>
Usage
Example
https://lian-yue.github.io/vue-upload-component/
Example source code
https://github.com/lian-yue/vue-upload-component/tree/2.0/example
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue-upload-component Test</title>
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/vue-upload-component"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="file in files">{{file.name}} - Error: {{file.error}}, Success: {{file.success}}</li>
</ul>
<file-upload
ref="upload"
v-model="files"
post-action="/post.method"
put-action="/put.method"
@input-file="inputFile"
@input-filter="inputFilter"
>
Upload file
</file-upload>
<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 = false" type="button">Stop upload</button>
</div>
<script>
new Vue({
el: '#app',
data: function() {
return {
files: []
}
},
components: {
FileUpload: VueUploadComponent
},
methods: {
/**
* Has changed
* @param Object|undefined newFile Read only
* @param Object|undefined oldFile Read only
* @return undefined
*/
inputFile: function(newFile, oldFile) {
if (newFile && oldFile && !newFile.active && oldFile.active) {
// Get response data
console.log('response', newFile.response)
if (newFile.xhr) {
// Get the response status code
// Required html5 support
console.log('status', newFile.xhr.status)
}
}
},
/**
* Pretreatment
* @param Object|undefined newFile Read and write
* @param Object|undefined oldFile Read only
* @param Function prevent Prevent changing
* @return undefined
*/
inputFilter: function(newFile, oldFile, prevent) {
if (newFile && !oldFile) {
// Filter non-image file
if (!/\.(jpeg|jpe|jpg|gif|png|webp)$/i.test(newFile.file)) {
return prevent()
}
}
// Create a blob field
newFile.blob = ''
let URL = window.URL || window.webkitURL
if (URL && URL.createObjectURL) {
newFile.blob = URL.createObjectURL(newFile.file)
}
}
}
});
</script>
</body>
</html>
SSR (Server isomorphism)
import FileUpload from 'vue-upload-component/src'
webpack.config.js
const nodeExternals = require('webpack-node-externals');
{
//.....
externals: [
nodeExternals({whitelist:[/^vue-upload-component/]})
]
//.....
}
Props
inputId
-
Type:
String -
Default:
this.name -
Description: The
idattribute of the input tag -
Usage:
<file-upload inputId="file2"></file-upload> <!--Output--> <input id="file2" />
name
-
Type:
String -
Default:
file -
Description: The
nameattribute of the input tag -
Usage:
<file-upload name="file"></file-upload> <!--输出--> <input name="file" />
post-action
-
Type:
String -
Default:
undefined -
Description:
POSTRequest upload URL -
Usage:
<file-upload put-action="/upload/put.php"></file-upload>
put-action
-
Type:
String -
Default:
undefined -
Description:
PUTRequest upload URLput-actionis not empty Please give priority toPUTrequest Requiredhtml5support -
Usage:
<file-upload put-action="/upload/put.php"></file-upload>
headers
-
Type:
Object -
Default:
{} -
Description: Attach
headerdata Requiredhtml5support -
Usage:
<file-upload :headers="{'X-Token-CSRF': 'code'}"></file-upload>
data
-
Type:
Object -
Default:
{} -
Description:
POST request: Append requestbodyPUT request: Append requestquery -
Usage:
<file-upload :data="{'access_token': 'access_token'}"></file-upload>
value, v-model
-
Type:
Array<Object> -
Default:
[] -
Description: File List In order to prevent unpredictable errors, can not directly modify the
files, please useadd,update,removemethod to modify -
Usage:
<file-upload :value="files" @input="updatetValue"></file-upload> <file-upload v-model="files"></file-upload>
accept
-
Type:
String -
Default:
undefined -
Description: The
acceptattribute of the input tag, MIME type Requiredhtml5support -
Usage:
<file-upload accept="image/png,image/gif,image/jpeg,image/webp"></file-upload> <file-upload accept="image/*"></file-upload>
multiple
-
Type:
Boolean -
Default:
false -
Description: The
multipleattribute of the input tag Whether to allow multiple files to be selected If it isfalsefile inside only one file will be automatically deleted -
Usage:
<file-upload :multiple="true"></file-upload>
directory
-
Type:
Boolean -
Default:
false -
Description: The
directoryattribute of the input tag Whether it is a upload folder View supported browsers -
Usage:
<file-upload :directory="true" :multiple="true"></file-upload>
extensions
-
Type:
Array | String | RegExp -
Default:
undefined -
Description: Allow upload file extensions
-
Usage:
<file-upload extensions="jpg,gif,png,webp"></file-upload> <file-upload :extensions="['jpg', 'gif', 'png', 'webp']"></file-upload> <file-upload :extensions="/\.(gif|jpe?g|png|webp)$/i"></file-upload>
size
-
Type:
Number -
Default:
0 -
Description: Allow the maximum byte to upload
-
Usage:
<file-upload :size="1024 * 1024"></file-upload>
timeout
-
Type:
Number -
Default:
0 -
Description: Upload timeout time in milliseconds
-
Usage:
<file-upload :timeout="600 * 1000"></file-upload>
thread
-
Type:
Number -
Default:
1 -
Description: Also upload the number of files at the same time (number of threads) Required
html5support -
Usage:
<file-upload :thread="3"></file-upload>
drop
-
Type:
Boolean | Element | CSS selector -
Default:
false -
Description: Drag and drop upload If set to
true, read the parent component as a container Requiredhtml5support -
Usage:
<file-upload :drop="true"></file-upload>
drop-directory
-
Type:
Boolean -
Default:
true -
Description: Whether to open the drag directory If set to
falsefilter out the directory -
Usage:
<file-upload :drop-directory="false"></file-upload>
Events
@input
-
Arguments:
files: Array<Object>
-
Description: The files is changed to trigger the method Default for
v-modelbinding -
Usage:
<file-upload :value="files" @input="updatetValue"></file-upload> <file-upload v-model="files"></file-upload>{ data() { return { files: [] } }, methods: { updatetValue(value) { this.files = value } } }
@input-filter
-
Arguments:
newFile: Object | undefinedRead and writeoldFile: Object | undefinedRead onlyprevent: Function
-
Description: Add, update, remove pre-filter You can not use
update,add,remove,clearmethods in the event ThenewFileobject can be modified within the eventprevent()can prevent modification -
Usage:
<ul> <li v-for="file in files"> <img :src="file.blob" width="50" height="50" /> </li> </ul> <file-upload :value="files" @input-filter="inputFilter"></file-upload>{ data() { return { files: [] } }, methods: { inputFilter(newFile, oldFile, prevent) { if (newFile && !oldFile) { // Add file // Filter non-image file // Will not be added to files if (!/\.(jpeg|jpe|jpg|gif|png|webp)$/i.test(newFile.file)) { return prevent() } // Create the `blob` field for thumbnail preview newFile.blob = '' let URL = window.URL || window.webkitURL if (URL && URL.createObjectURL) { newFile.blob = URL.createObjectURL(newFile.file) } } if (newFile && oldFile) { // Update file // Increase the version number if (!newFile.version) { newFile.version = 0 } newFile.version++ } if (!newFile && oldFile) { // Remove file // Refused to remove the file // return prevent() } } } }
@input-file
-
Arguments:
newFile: Object | undefinedRead onlyoldFile: Object | undefinedRead only
-
Description: Add, update, remove after You can use
update,add,remove,clearmethods in the event You can not modify thenewFileobject in the event You can not modify theoldFileobject in the event -
Usage:
<file-upload ref="upload" :value="files" @input-file="inputFile"></file-upload>{ data() { return { files: [] } }, methods: { inputFile(newFile, oldFile) { if (newFile && !oldFile) { // Add file // Automatic upload if (!this.$refs.upload.active) { this.$refs.upload.active = true } } if (newFile && oldFile) { // Update file // Upload progress if (newFile.progress !== oldFile.progress) { console.log('progress', newFile.progress, newFile) } // Upload error if (newFile.error !== oldFile.error) { console.log('error', newFile.error, newFile) } // Uploaded successfully if (newFile.success !== oldFile.success) { console.log('success', newFile.success, newFile) } } if (!newFile && oldFile) { // Remove file // Automatically delete files on the server if (oldFile.success && oldFile.response.id) { // $.ajax({ // type: 'DELETE', // url: '/file/delete?id=' + oldFile.response.id, // }); } } } } }
Methods
get
-
Arguments:
id: Object | StringFile object | file id
-
Result:
Object | BooleanThere is a return file object that otherwise returnsfalse -
Description: Use
idto get a file object
add
-
Arguments:
files: Object | Array<Object> | window.FileFile object | file array (multiple) | window.File objectstart: BooleanWhether it is inserted from the start position
-
Result:
Object | Array<Object> | BooleanThe incoming array is returned to the array otherwise the object orfalse -
Description: Add one or more files
-
Usage:
<ul> <li v-for="file in files"> <span>{{file.name}}</span> </li> </ul> <file-upload v-model="files"></file-upload> <button type="button" @click.prevent="addText">Add a file</button>{ data() { return { files: [] } }, methods: { addText() { let file = new File(['foo'], 'foo.txt', { type: "text/plain", }) this.$refs.upload.add(file) } } }
update
-
Arguments:
id: Object | StringFile object | file iddata: ObjectUpdated data object
-
Result:
Object | BooleanSuccessfully returnednewFilefailed to returnfalse -
Description: Update a file object
-
Usage:
<ul> <li v-for="file in files"> <span>{{file.name}}</span> <button v-show="file.active" type="button" @click.prevent="abort(file)">Abort</button> </li> </ul> <file-upload v-model="files"></file-upload>{ data() { return { files: [] } }, methods: { abort(file) { this.$refs.upload.update(file, {active: false}) // or // this.$refs.upload.update(file, {error: 'abort'}) } } }
remove
-
Arguments:
id: Object | StringFile object | file id
-
Result:
Object | BooleanSuccessfully returnedoldFilefailed to returnfalse -
Description: Remove a file object
-
Usage:
<ul> <li v-for="file in files"> <span>{{file.name}}</span> <button type="button" @click.prevent="remove(file)">Remove</button> </li> </ul> <file-upload v-model="files"></file-upload>{ data() { return { files: [] } }, methods: { remove(file) { this.$refs.upload.remove(file) } } }
clear
-
Result:
BooleanAlways returntrue -
Description: Empty the file list
Component Data data
features
-
Type:
Object -
Read only:
true -
Default:
{html5: true, directory: false, drag: false} -
Description: Used to determine the browser support features
-
Usage:
<app> <file-upload ref="upload"></file-upload> <span v-show="$refs.upload && $refs.upload.features.drag">Support drag and drop upload</span> <span v-show="$refs.upload && $refs.upload.features.directory">Support folder upload</span> <span v-show="$refs.upload && $refs.upload.features.html5">Support for HTML5</span> </app>
active
-
Type:
Boolean -
Read only:
false -
Default:
false -
Description: Activation or abort upload
-
Usage:
<app> <file-upload ref="upload"></file-upload> <span v-if="!$refs.upload || !$refs.upload.active" @click="$refs.upload.active = true">Start upload</span> <span v-else @click="$refs.upload.active = false">Stop upload</span> </app>
dropActive
-
Type:
Boolean -
Read only:
true -
Default:
false -
Description: Is dragging
-
Usage:
<app> <file-upload ref="upload" :drop="true"></file-upload> <span v-show="$refs.upload && $refs.upload.dropActive">Drag and drop here for upload<span> </app>
uploaded
-
Type:
Boolean -
Read only:
true -
Default:
true -
Description: All uploaded
-
Usage:
<app> <file-upload ref="upload"></file-upload> <span v-show="$refs.upload && $refs.upload.uploaded">All files have been uploaded<span> </app>
File
File object in the
input-filterevent outside the use of$ refs.upload.update (file, data Object)
id
-
Type:
String | Number -
Read only:
true -
Default:
Math.random().toString(36).substr(2) -
Description: File ID
size
-
Type:
Number -
Read only:
false -
Default:
-1 -
Description: File size
Required
html5support
name
-
Type:
String -
Read only:
false -
Default:
-
Description: Filename
Format:
directory/filename.giffilename.gif
type
-
Type:
String -
Read only:
false -
Default:
empty -
Description: MIME type
Format:
image/gifimage/pngtext/htmlRequired
html5support
active
-
Type:
Boolean -
Read only:
false -
Default:
false -
Description: Activation or abort upload
true= Uploadfalse= Abort
error
-
Type:
String -
Read only:
false -
Default:
-
Description: Upload failed error code
Built-in
size,extension,timeout,abort,network,server,denied
success
-
Type:
Boolean -
Read only:
false -
Default:
false -
Description: Whether the upload was successful
putAction
-
Type:
String -
Read only:
false -
Default:
this.putAction -
Description: Customize the current file
PUTURL
postAction
-
Type:
String -
Read only:
false -
Default:
this.postAction -
Description: Customize the current file
POSTURL
headers
-
Type:
Object -
Read only:
false -
Default:
this.headers -
Description: Customize the current file
HTTPHeader
data
-
Type:
Object -
Read only:
false -
Default:
this.data -
Description: Customize the current file
bodyorqueryto attach content
timeout
-
Type:
Number -
Read only:
false -
Default:
0 -
Description: Customize the upload timeout for a current single file
response
-
Type:
Object | String -
Read only:
false -
Default:
{} -
Description: Response data
progress
-
Type:
String -
Read only:
true -
Default:
0.00 -
Description: Upload progress
speed
-
Type:
Number -
Read only:
true -
Default:
0 -
Description: Per second upload speed
xhr
-
Type:
XMLHttpRequest -
Read only:
true -
Default:
undefined -
Description:
HTML5uploadXMLHttpRequestobject
iframe
-
Type:
Element -
Read only:
true -
Default:
undefined -
Description:
HTML4uploadiframeelement