vue实现图片路径转二进制文件流(binary)

yizhihongxing

下面是详细的攻略:

如何实现图片路径转换为二进制文件流(binary)?

将图片路径转化为二进制文件流的过程,包括三个步骤:获取图片,读取图片文件二进制,将二进制数据存储起来。下面是具体步骤。

获取图片

获取图片通常需要从 input[type=file] 元素或一个图片 URL。对于 input[type=file] 元素,可通过 onchange 事件获取文件对象。对于图片 URL,可通过创建 img 元素,将图片 URL 赋值为 img.src 并等待图片加载完成。同时需要注意的是,获取图片时需要处理跨域的问题。

读取文件二进制

读取文件二进制通常有两种方式:FileReader API 和 Ajax。FileReader API 提供了如下方法:

// 创建 FileReader 对象
let reader = new FileReader();

// 读取文件
reader.readAsBinaryString(file);

// 监听加载完成事件,完成后获得二进制数据
reader.onload = function() {
    let binary = reader.result;
}

Ajax 通过 XMLHttpRequest 对象访问文件路径:

// 创建 XMLHttpRequest 处理 Ajax 请求
let xhr = new XMLHttpRequest();

// 处理回调函数,获取二进制数据
xhr.onload = function() {
    let binary = xhr.response;
}

// 打开请求
xhr.open('GET', url, true);

// 设置返回类型
xhr.responseType = 'arraybuffer';

// 发送请求
xhr.send();

将二进制数据存储起来

将二进制数据存储起来可以考虑使用 Base64 编码或 Blob 对象。其中 Base64 编码可将二进制数据转化为文本,用于在浏览器中显示图片,或通过 Ajax 发送到服务器。通过创建 Blob 对象可将数据存储为文件并下载,或通过 FormData 发送到服务器。

使用 Base64 编码

使用 Base64 编码的代码示例:

let reader = new FileReader();
reader.readAsBinaryString(file);
reader.onload = function() {
    let binary = btoa(reader.result);
    let src = 'data:image/png;base64,' + binary;
    let img = document.createElement('img');
    img.src = src;
    document.body.appendChild(img);
}
使用 Blob 对象

使用 Blob 对象的代码示例:

let reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = function() {
    let blob = new Blob([reader.result], {type: file.type});
    let link = document.createElement('a');
    link.href = URL.createObjectURL(blob);
    link.download = file.name;
    document.body.appendChild(link);
    link.click();
}

两个示例

示例1:使用 Vue 实现图片路径转成二进制流文件

步骤如下:

  1. 在 src 目录下新建 components 文件夹,然后新建一个 ImageToBinary.vue 文件。代码如下:
<template>
    <div>
        <input type="file" ref="fileInput" @change="onSelectFile($event)">
        <p><img :src="src"></p>
    </div>
</template>

<script>
export default {
    data() {
        return {
            src: ''
        }
    },
    methods: {
        onSelectFile(event) {
            let file = event.target.files[0];
            this.src = '';
            this.readFile(file);
        },
        readFile(file) {
            let reader = new FileReader();
            reader.readAsBinaryString(file);
            reader.onload = this.onLoad;
        },
        onLoad(event) {
            let binary = btoa(event.target.result);
            this.src = 'data:image/png;base64,' + binary;
        }
    }
}
</script>
  1. 在 App.vue 文件引入 ImageToBinary.vue 组件。代码如下:
<template>
  <div id="app">
    <ImageToBinary />
  </div>
</template>

<script>
import ImageToBinary from './components/ImageToBinary.vue'

export default {
  name: 'App',
  components: {
    ImageToBinary
  }
}
</script>
  1. 运行项目,上传一张图片,即可看到在浏览器中显示出图片,同时打印出二进制数据。

示例2:使用 Axios 将图片路径转成二进制流文件并 POST 到后端

步骤如下:

  1. 在 src 目录下新建 components 文件夹,然后新建一个 ImageUpload.vue 文件。代码如下:
<template>
    <div>
        <input type="file" ref="fileInput" @change="onSelectFile($event)">
        <button @click.prevent="uploadImage">上传图片</button>
    </div>
</template>

<script>
import axios from 'axios'

export default {
    data() {
        return {
            file: null
        }
    },
    methods: {
        onSelectFile(event) {
            this.file = event.target.files[0];
        },
        uploadImage() {
            let reader = new FileReader();
            reader.readAsArrayBuffer(this.file);
            reader.onload = () => {
                let binary = new Uint8Array(reader.result);
                let formData = new FormData();
                formData.append('image', new Blob([binary], {type: this.file.type}), this.file.name);
                axios.post('/api/image/upload', formData)
                .then(response => {
                    console.log(response.data);
                })
                .catch(error => {
                    console.log(error);
                });
            };
        }
    }
}
</script>
  1. 在 App.vue 文件引入 ImageUpload.vue 组件。代码如下:
<template>
  <div id="app">
    <ImageUpload />
  </div>
</template>

<script>
import ImageUpload from './components/ImageUpload.vue'

export default {
  name: 'App',
  components: {
    ImageUpload
  }
}
</script>
  1. 运行项目,上传一张图片后,图片将转变为二进制数据,并 POST 到后端。

以上就是如何实现图片路径转化为二进制文件流的完整攻略和两个示例,希望可以帮助到您。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue实现图片路径转二进制文件流(binary) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)

    Vue组件间通信方法总结 Vue组件通信是Vue开发者必须掌握的技能之一。本文将总结Vue中组件间通信的各种方法,包括父子组件、兄弟组件及祖先后代组件间通信。 父子组件通信 父子组件通信是Vue中最常见的通信方式。下面分别介绍组件间通信的几种方法。 Props 在Vue中父组件可以通过Props向子组件传递数据,子组件通过props选项接收父组件传递过来的数…

    Vue 2023年5月28日
    00
  • Vue.js中的高级面试题及答案

    Vue.js中的高级面试题及答案 前言 在Vue.js的应用中,一些高级问题会在面试中被问及。本攻略将详细讲解一些Vue.js高级面试题及答案。 1. Vue.js中的双向绑定如何工作? Vue.js中的双向绑定是通过Vue实例中的v-model指令来实现的。当输入框的值发生改变时,Vue.js会自动更新数据模型中的值。 示例代码如下: <templa…

    Vue 2023年5月27日
    00
  • idea如何自动生成serialVersionUID

    首先需要明确的是,SerialVersionUID是Java序列化机制中一个非常重要的概念,它是用于识别不同版本类别的唯一识别码,常用于在网络传输和持久化对象时确定对象版本以便于正确地进行反序列化。 在IDEA中自动生成SerialVersionUID的方法如下: 进入IDEA设置界面:File -> Settings -> Editor -&g…

    Vue 2023年5月28日
    00
  • Vue实现导出excel表格功能

    下面是Vue实现导出Excel表格的完整攻略: 准备工作 引入xlsx库,可以通过以下命令安装 npm install xlsx –save。 在Vue项目中新建一个组件用来放置导出Excel的按钮。 示例代码 <template> <div> <button @click="generateExcel()&quot…

    Vue 2023年5月27日
    00
  • 茶余饭后聊聊Vue3.0响应式数据那些事儿

    让我来详细讲解一下“茶余饭后聊聊Vue3.0响应式数据那些事儿”的完整攻略。 Vue3.0响应式数据 在Vue3.0中,提供了一个新的API——ref,来创建响应式数据。 创建响应式数据 要创建一个响应式数据,只需要使用ref函数进行创建即可,例如: import { ref } from ‘vue’ const count = ref(0) 使用响应式数据…

    Vue 2023年5月29日
    00
  • vue.js中created方法作用

    Vue.js 中的 created() 方法是 Vue 实例生命周期钩子函数之一,用于在 Vue 实例创建并构建完毕后被触发执行。接下来,我将详细介绍 created() 方法的作用和用法。 created() 方法的作用 在 Vue.js 应用中使用 created() 方法通常有以下一些作用: 初始化一些数据,包括组件中的变量,是最常用的 created…

    Vue 2023年5月27日
    00
  • 使用Vue写一个todoList事件备忘录经典小案例

    讲解“使用Vue写一个todoList事件备忘录经典小案例”的完整攻略。 1. 准备工作 在开始实践之前,需要做一些准备工作: 安装Vue Vue可以通过CDN或者npm安装,这里介绍使用npm安装的方式: npm install vue 创建Vue的实例 在html文件中引入Vue,然后创建一个Vue实例,用于绑定页面元素和数据: <!DOCTYPE…

    Vue 2023年5月29日
    00
  • vue3组件化开发之可复用性的应用实例详解

    下面详细讲解“vue3组件化开发之可复用性的应用实例详解”这个完整攻略。 一、背景和前置知识 首先需要了解的是Vue3的组件化开发,并且对Vue3语法要有一定的掌握。 二、组件复用性的重要性 在实际开发中,组件的复用性非常重要,可以大大提升开发效率。在Vue3中,组件是可以被复用的,通过将公共逻辑和UI组件编写成可复用的组件,可以节省时间和代码量。 三、如何…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部