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日

相关文章

  • Android判断json格式将错误信息提交给服务器

    当我们使用Android App与服务器进行数据交互的过程中,有时候会出现Json数据格式错误的情况。这时候我们需要在App中进行判断,将错误信息提交给服务器以便进行修复。下面是针对此情况的完整攻略: 判断Json格式是否错误 在Android App中,我们可以使用try…catch语句块来判断Json格式是否错误。具体方法如下所示: try { JS…

    Vue 2023年5月28日
    00
  • Vue 用Vant实现时间选择器的示例代码

    请看以下详细讲解: Vue 用Vant实现时间选择器的示例代码 1. 安装 Vant 在项目中引入 Vant UI 库,可以通过npm进行安装: npm install vant -S 也可以从CDN方式引入,在HTML文件中添加以下代码: <!– 引入 Vant 样式文件 –> <link rel="stylesheet&q…

    Vue 2023年5月29日
    00
  • 详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)

    Vue的钩子函数 Vue的钩子函数是Vue.js提供的一种功能,我们可以使用这些函数在组件的生命周期中绑定自定义行为。Vue的钩子函数可以分为两类,一个是系统内置的,一个是我们可以在组件中自定义的。其中,系统内置的钩子函数被称为生命周期钩子,用来在组件的不同生命周期中,执行不同的操作。 路由导航守卫 Vue的路由导航守卫,是Vue中的一种钩子函数,用于控制路…

    Vue 2023年5月27日
    00
  • 查找Vue中下标的操作(some和findindex)

    讲解Vue中下标的操作(some和findindex)的完整攻略如下。 什么是 some 和 findIndex 操作? some() 操作可以判断数组中是否至少有一项符合条件。 findIndex() 操作可以获取数组中符合条件的项的下标。 在 Vue 中,我们常用这两个操作来搜索数组中的数据。下面分别对这两个操作进行详细讲解,并给出相关的示例。 some…

    Vue 2023年5月28日
    00
  • Vue中定义全局变量与常量的各种方式详解

    下面将对“Vue中定义全局变量与常量的各种方式详解”的完整攻略进行讲解。 定义全局变量 使用Vue.prototype 我们可以使用Vue.prototype来定义全局变量。具体步骤如下: 在Vue实例化之前,通过Vue.prototype添加需要定义的全局变量 javascript Vue.prototype.$myVariable = ‘这是一个全局变量…

    Vue 2023年5月28日
    00
  • vue项目首屏加载时间优化实战

    下面是详细讲解“vue项目首屏加载时间优化实战”的完整攻略: 1. 确认当前项目的首屏加载时间 在进行优化之前,我们需要明确当前项目的首屏加载时间,可以通过Chrome浏览器自带的Performance面板来进行测试和分析。具体步骤如下: 打开Chrome浏览器,进入要测试的网站。 按下F12键,打开开发者工具。 点击Performance面板,点击页面re…

    Vue 2023年5月29日
    00
  • vue $set 实现给数组集合对象赋值

    当使用 Vue.js 开发中,如果想要给数组或对象添加新属性并确保这些属性是可响应的,可以使用 Vue 的 $set 方法来实现。 Vue.$set() 方法接受三个参数:对象,键,值。它所做的主要工作就是创建新属性,并将其设置为可响应的。 下面是使用Vue.$set()方法来给数组添加新元素的示例: <template> <div>…

    Vue 2023年5月28日
    00
  • 简易vuex4核心原理及实现源码分析

    下面就来详细讲解一下“简易vuex4核心原理及实现源码分析”的完整攻略。 一、什么是Vuex? Vuex是Vue.js官方推出的一款状态管理模式。作为一个共享状态管理库,它可以将多个组件之间共享的状态抽离出来形成全局唯一数据源,提供了一种集中式存储和管理应用状态的方案。 二、Vuex核心原理 Vuex的核心原理是响应式数据,也就是说,所有数据的变更都可以被具…

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