使用VUEJ和Typescript将输入图像转换为base64

发布于 2025-01-30 06:06:27 字数 953 浏览 2 评论 0 原文

这是我在这里的第一个问题。

我想使用vuejs 3将输入文件(image)从表单中转换为typescript和base64,以将其“发送”到我的后端(Java,Spring Boot),并将其存储在MongoDB中,作为“用户”模型的一部分

。我拥有的:

e.target.files [0]行不断地说它可能是无效的。

<template>
<v-file-input
  @change="handleImage"
  type="file"
  accept="image/*"
  label="File input"
  v-model="picture"
  filled
  prepend-icon="mdi-camera"
></v-file-input>
</template>
<script lang="ts">
interface State {
picture: string;
}

data: (): State => {
return {
picture: "",
  }
}
methods: {
handleImage(e: Event) {
      const selectedImage = e.target.files[0];
      this.createBase64Image(selectedImage);
    },
    createBase64Image(fileObject: File) {
      const reader = new FileReader();
      reader.onload = (e) => {
        this.picture = e.target.result;
      };
      reader.readAsBinaryString(fileObject);
    },
},
</script>

预先感谢您的帮助!

This is my first question here.

I would like to convert an input file(image) from a form using VueJs 3 and typescript to Base64 to "send" it to my backend (java, spring boot) and store it in mongodb as a part of a "User" model

Here's what I have:

The line e.target.files[0] keeps saying that it's possibly null.. so the const selectedImage and this.picture won't get them.

<template>
<v-file-input
  @change="handleImage"
  type="file"
  accept="image/*"
  label="File input"
  v-model="picture"
  filled
  prepend-icon="mdi-camera"
></v-file-input>
</template>
<script lang="ts">
interface State {
picture: string;
}

data: (): State => {
return {
picture: "",
  }
}
methods: {
handleImage(e: Event) {
      const selectedImage = e.target.files[0];
      this.createBase64Image(selectedImage);
    },
    createBase64Image(fileObject: File) {
      const reader = new FileReader();
      reader.onload = (e) => {
        this.picture = e.target.result;
      };
      reader.readAsBinaryString(fileObject);
    },
},
</script>

Thank you in advance for your help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

摇划花蜜的午后 2025-02-06 06:06:27

您可以更改 reader.readasbinarystring(fileObject) createBase64Image 函数函数 reader.readasdataurl(fileObject)

也有助于使用Refs在您的组件中

<template>
<v-file-input
  @change="handleImage"
  type="file"
  accept="image/*"
  label="File input"
  v-model="picture"
  filled
  prepend-icon="mdi-camera"
  ref="file"
></v-file-input>
</template>

<script lang="ts">
interface State {
picture: string;
}

data: (): State => {
return {
picture: "",
  }
}
methods: {
    handleImage(e: Event) {
      const selectedImage = this.$refs.file.files[0];
      this.picture = this.createBase64Image(selectedImage);
    },
    createBase64Image(fileObject: File) {
      const reader = new FileReader();
      return reader.readAsDataURL(fileObject);
    },
},
</script>

其他信息中:

You could change reader.readAsBinaryString(fileObject) in the createBase64Image function to reader.readAsDataURL(fileObject)

Also something that would help is to use refs in your component

<template>
<v-file-input
  @change="handleImage"
  type="file"
  accept="image/*"
  label="File input"
  v-model="picture"
  filled
  prepend-icon="mdi-camera"
  ref="file"
></v-file-input>
</template>

<script lang="ts">
interface State {
picture: string;
}

data: (): State => {
return {
picture: "",
  }
}
methods: {
    handleImage(e: Event) {
      const selectedImage = this.$refs.file.files[0];
      this.picture = this.createBase64Image(selectedImage);
    },
    createBase64Image(fileObject: File) {
      const reader = new FileReader();
      return reader.readAsDataURL(fileObject);
    },
},
</script>

Additional Information:

https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL

空城之時有危險 2025-02-06 06:06:27

我认为Onchange事件并不能保证E.Target.Result是非无效的。进行此检查:

if (e.target && e.target.files.length > 0)

I think onchange event doesn't guarantees e.target.result to be non-null. Do this check:

if (e.target && e.target.files.length > 0)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文