如何使用Vue.js将文件对象渲染为HTML元素

3

我在将图像渲染至HTML元素时遇到了一些问题。我认为有经验的前端开发人员可能会很快解决这个问题。 我有一个Vuetify组件,允许用户输入个人资料图片:

<v-form>
   <v-avatar size="144">
       <v-icon hidden ref="default_icon" size="144">account_circle</v-icon>
       <img ref="my_img" style="display: none;" :src="my_photo.name">
       <v-btn @click="$refs.my_input.click()" class="img_btn" absolute right small fab dark color="pink">
           <v-icon dark>add</v-icon>
       </v-btn>
       <input ref="my_input" hidden type="file" accept="image/*" @change="onFileChange($refs.my_input)">
   </v-avatar>
</v-form>

当元素调用onFileChange时,它将HTML元素传递给函数。

onFileChange(event) {
    this.my_photo = event.files[0]
    console.log(this.my_photo)
    this.$refs.default_icon.style.display = "none"
    this.$refs.my_img.style.display = "inline"
}

现在这个函数用img标签替换了图标。我想用用户输入的图片填充img标签。this.my_photo是一个文件类型的变量。有人知道怎么做吗? 感谢大家!

1个回答

5
my_photo.name 只是上传图片的名称。您需要将上传的图片转换为适用于图像 src 的有效格式。您可以使用 FileReader.readAsDataURL()URL.createObjectURL() 来完成这个操作。这些方法可以创建图像标签可用的源表示形式。请注意,如果您计划将此图像上传到服务器,则需要保留对 event.target.files[0] 的引用。以下是使用 URL.createObjectURL() 的示例。

new Vue({
  el: "#app",
  data: {
    my_photo: '',
  },
  methods: {
    onFileInput(event) {        
      const data = URL.createObjectURL(event.target.files[0]);
      this.my_photo = data;
    },
  },
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="app">
  <input type="file" @change="onFileInput($event)">
  <img :src="my_photo" alt="">
</div>


谢谢!这正是我在寻找的。我非常感激。 - allnuck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接