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

下面是详细的攻略:

如何实现图片路径转换为二进制文件流(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如何动态给img赋值

    下面是对于”Vue如何动态给img赋值”的完整攻略。 使用v-bind绑定img src属性 在Vue中,我们可以使用v-bind指令来动态绑定img标签的src属性。具体使用方法是:在img标签上使用v-bind指令,使用表达式绑定src属性的值,如下所示: <template> <div> <img v-bind:src=&…

    Vue 2023年5月27日
    00
  • JS实现简单的抽奖转盘效果示例

    下面是关于“JS实现简单的抽奖转盘效果示例”的完整攻略。 1. 准备工作 首先,我们需要准备以下文件和工具: HTML 文件:作为网页展示的载体。 CSS 文件:用于美化网页样式。 JavaScript 文件:实现抽奖转盘效果的主要代码。 图片资源:包括转盘背景、奖品图标等。 2. HTML 结构搭建 在 HTML 文件中,我们需要搭建转盘的基本结构。示例如…

    Vue 2023年5月28日
    00
  • Vite3迁移Webpack5的实现

    关于“Vite3迁移Webpack5的实现”的完整攻略,我将会从以下几个方面进行详细讲解: 什么是Vite3和Webpack5? 为什么要迁移Vite3到Webpack5? Vite3迁移Webpack5的实现步骤 示例说明 1. 什么是Vite3和Webpack5? Vite3是一个基于ESM的快速开发构建工具,专注于提供基于浏览器原生ES模块系统的开发体…

    Vue 2023年5月28日
    00
  • vue3渲染函数(h函数)的变更剖析

    文本格式规范: 标题1 标题2 标题3 列表1 列表2 代码块: //这里写代码 在Vue3中,渲染函数(h函数)的变更是非常重要的一个特性,可以让我们更加方便、灵活地构建组件和页面。下面对这个变更做出详细说明。 Vue3中h函数变更的重要性 在Vue2中,当我们需要编写组件的渲染函数时,需要手写模板。虽然利用Vue模板的语法可以让编写模板变得更加便捷,但还…

    Vue 2023年5月28日
    00
  • Vue 简单配置公用接口地址方式

    首先,我们需要了解Vue的配置文件vue.config.js。这个文件在Vue项目的根目录下,可以用来对Vue应用进行一些自定义配置。 在vue.config.js文件中,我们可以引入并配置Webpack插件。通过使用Webpack插件,我们可以对Webpack进行自定义配置,从而实现Vue项目的一些特殊需求,比如修改Webpack的别名、调整Webpack…

    Vue 2023年5月28日
    00
  • vue项目是如何运行起来的

    关于Vue项目的运行过程,可以分为三个阶段: 项目初始化 打包构建 运行阶段 1. 项目初始化 在开始开发Vue项目之前,需要先进行初始化操作。可以使用Vue脚手架工具Vue CLI来创建一个基于Webpack的Vue项目模板,命令如下: vue create my-project 以上命令将在当前目录下创建一个名为my-project的项目,并自动下载需要…

    Vue 2023年5月28日
    00
  • vue 如何添加全局函数或全局变量以及单页面的title设置总结

    根据您的需求,我会详细讲解“Vue 如何添加全局函数或全局变量以及单页面的 title 设置总结”的完整攻略,包含两个示例用于进一步说明。 一、Vue 如何添加全局函数或全局变量 在 Vue 中,我们可以方便地在全局使用自定义函数和变量,这样可以简化业务逻辑,提高开发效率。以下是实现此功能的方法: 1.1 添加全局函数 在 Vue 中添加全局函数的方式是通过…

    Vue 2023年5月28日
    00
  • Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果

    下面我将为您详细讲解“Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果”的完整攻略。 Vue render渲染时间戳转时间 在Vue的render功能中,我们经常需要将服务器端返回的时间戳转换成我们常用的时间格式。这里向大家推荐moment.js这个库,它是一个轻量级的JavaScript日期库,可以帮助我们方便地转换时间格式。下面是一个简…

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