javascript - 将文件转换为 base64 并在 Vuejs 中添加 v-model 绑定(bind)

标签 javascript vue.js vuejs2 vue-component v-model

我正在构建一个具有文件输入字段并通过 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')
            ])
        ])
    }
}

虽然在 v-model 中有值,但我得到了文件的路径,但我需要有一个 base64 元素。目前在我的控制台中出现以下错误:

Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'

file upload error

帮我执行。谢谢

最佳答案

你应该设置reader.readAsDataURL(event.target.files[0])

代替

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])
    }
}

关于javascript - 将文件转换为 base64 并在 Vuejs 中添加 v-model 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53944112/

相关文章:

vue.js - vue-router 仅更改命名 View 之一而不影响其他 View

javascript - 如何在 Vue.js 中的方法内触发输入焦点事件?

javascript - 使用 V-For 为按钮动态分配键码

javascript - 如何防止表单在提交后重新加载页面

javascript - Telegram Bot : Sending an image only once, 下次不再下载

javascript - 如何在 Node.js 中创建图像?

javascript - 网络爬虫的异步请求

javascript - 使用 nuxt-child 仅一层的 Nuxt 动态嵌套路由

javascript - 在 Vue.js v2 中动态渲染子组件

javascript - Vue js 动态导入组件