vue-media-upload
v2.2.4
Published
upload multiple images with preview
Downloads
1,324
Maintainers
Readme
vue-media-upload
📷 vue-media-upload is a Vuejs package that handle multiple images upload and preview.
🖼️ This package support the create and the update form, and handles the upload for you.
👀 Demo
💻 Install
via npm
npm install vue-media-upload
or via yarn
yarn add vue-media-upload
🕹 Usage
import { createApp } from 'vue';
import Uploader from 'vue-media-upload';
let app = createApp({})
app.component('Uploader', Uploader);
app.mount("#app")
or
import Uploader from "vue-media-upload";
export default {
components: {
Uploader
}
};
🔎 Example
Create Form
<template>
<div>
<Uploader
server="/api/upload"
@change="changeMedia"
/>
</div>
</template>
<script>
import Uploader from 'vue-media-upload'
export default {
data() {
return {
media: []
}
},
methods:{
changeMedia(media){
this.media = media
}
},
components: {
Uploader
},
}
</script>
Update Form
<template>
<div>
<Uploader
server="/api/upload"
:media="media.saved"
path="/storage/media"
@add="addMedia"
@remove="removeMedia"
/>
</div>
</template>
<script>
import Uploader from 'vue-media-upload'
export default {
data() {
return {
media: {
saved: [
{ id: 1, name: '123_image.jpg' },
{ id: 2, name: '456_image.jpg' },
],
added: [],
removed: []
}
}
},
methods:{
addMedia(addedImage, addedMedia){
this.media.added = addedMedia
},
removeMedia(removedImage, removedMedia){
this.media.removed = removedMedia
}
},
components: {
Uploader
},
}
</script>
⚙️ Props
| Prop | Type | Default | Description |
| --- | --- | :---: | --- |
| server | String | '/api/upload'
| The Route that handle the image upload. The Upload handler should return the name of the uploaded image in the following format: { "name": "123_image.jpg" }
|
| isInvalid | Boolean | false
| Whether error styling should be applied. |
| media | Array | []
| The list of the stored images, that each of which must have the property name
containing the name of the image. [ { name: '123_image.jpg' } , { name: '456_image.jpg' } ]
|
| location | String | ''
| The location of the folder where the saved images are stored.|
| max | Number | null
| The maximum number of files allowed to be uploaded.|
| maxFilesize | Number | 4
| The maximum filesize (in megabytes) that is allowed to be uploaded|
| warnings | Boolean | true
| By default, the package uses JavaScript alerts to display warnings. In case you want to use your custom warnings, you can disable the component pop-ups using this prop. |
| headers | Object | null
| An optional prop to send additional headers to the server. Eg: { "Authorization": "Bearer ACCESS_TOKEN" }
|
💾 Events
| Event | Payload | Description |
| --- | --- | --- |
| @init | param
: The list of all the listed images. | Emitted when the component is ready to use. |
| @change | param
: The list of all the listed images. | Emitted after an image was added or removed. |
| @add | param1
: The image that was added. param2
: The list of the added Images. | Emitted after an image was added. |
| @remove | param1
: The image that was removed. param2
: The list of images that have been removed from the stored media. | Emitted after an image was removed. |
| @max | | Emitted when max
prop is exceeded. |
| @max-filesize | param
: The image size. | Emitted when maxFilesize
prop is exceeded. |
📙 How it works in a Server-Rendered Form?
vue-media-upload component uploads the image
image.jpg
as multipart/form-data using a POST request.server temporary saves the image with a unique name
123_image.jpg
in a/tmp/uploads
folder.server returns the unique name
123_image.jpg
in a request response.vue-media-upload insert the unique name
123_image.jpg
in a hidden html input withname="added_media[]"
.user submits the component parent form, which includes the hidden input field containing the unique image name.
server uses the unique image name to move
123_image.jpg
from the/tmp/uploads
folder to its final location.
🔣 Inputs
Note that all this inputs are hidden and they are just a way to validate and pass data to the backend when using this package in a Server-Rendered Form!
| Name attribute | Description | | --- | --- | | added_media[] | The added images in the component | | removed_media[] | The images that have been removed from the stored media. | | media | This input is added, when the component has at least one image or more listed, as a way for the backend to validate the Images as being required. |
🤝 Contributing
- Fork this repository.
- Create new branch with feature name.
- Create your feature.
- Commit and set commit message with feature name.
- Push your code to your fork repository.
- Create pull request. 🙂
⭐️ Support
If you like this project, You can support me with starring ⭐ this repository.
📄 License
Developed with ❤️