I am building a component which has file input fields and being rendered through function in VueJs
:
export default {
name: 'nits-file-input',
props: {
label: String,
},
render (createElement) {
return createElement('div', { class: 'form-group m-form__group'}, [
createElement('label', this.label),
createElement('div'),
createElement('div', { class: 'custom-file'},[
createElement('input', {
class: 'custom-file-input',
attrs: { type: 'file' },
domProps: {
value: self.value
},
on: {
input: (event) => {
var reader = new FileReader()
reader.readAsDataURL(event.target.value)
reader.onload = function () {
console.log(reader.result);
};
this.$emit('input', event.target.value)
}
}
}),
createElement('label', { class: 'custom-file-label'}, 'Choose File')
])
])
}
}
While having the values in v-model I get the path of file but I need to have a base64
element. currently in my console I'm getting following error:
Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'
Help me out in execution. Thanks
You should set reader.readAsDataURL(event.target.files[0])
instead of
reader.readAsDataURL(event.target.value)
:
on: {
input: (event) => {
var reader = new FileReader()
reader.readAsDataURL(event.target.files[0])
reader.onload = () => {
console.log(reader.result);
};
this.$emit('input', event.target.files[0])
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With