当前位置: 首页 > news >正文

js 通过input,怎么把选择的txt文件转为base64格式

文章目录

  • 基本概念与作用说明
    • Base64编码
    • File对象
    • 相互转换的意义
  • 从File对象到Base64编码
  • 从Base64编码到File对象
  • 批量转换File对象为Base64编码
  • 批量转换Base64编码为File对象
  • 功能使用思路
    • 思路一:动态生成预览
    • 思路二:异步处理与用户反馈
    • 思路三:上传前的文件压缩
  • 实际开发中的技巧

在前端开发中,Base64编码和File对象是处理文件数据时经常使用的两种方式。Base64编码常用于将二进制数据转换为文本格式,便于在网络中传输。而File对象则提供了处理用户上传文件的接口。本文将深入探讨这两种数据格式之间的转换,并通过多个示例来展示如何在实际开发中运用这些技术。

基本概念与作用说明

Base64编码

Base64编码是一种将二进制数据转换成ASCII字符串的方法,使得数据能够在不支持二进制数据的环境中传输。通常用于邮件附件、嵌入图像到HTML文档、或者在网络上传输二进制数据。

File对象

File对象代表文件系统中的文件,它包含了文件的基本信息(如文件名、类型)以及文件数据。在Web应用程序中,用户可以选择文件并通过FileReader API读取文件内容。

相互转换的意义

在前端开发中,我们经常需要将用户上传的文件转换为Base64编码以便在网络中传输,或者将Base64编码的数据转换回File对象以方便进一步处理(如下载、预览等)。了解这些转换方法对于前端开发者来说是非常重要的

从File对象到Base64编码

    <input id="uploadBtn" type="file" onchange="loadExcel(event)" />
function fileToBase64(file) {return new Promise((resolve, reject) => {const reader = new FileReader();reader.onload = (event) => {resolve(event.target.result);};reader.onerror = reject;reader.readAsDataURL(file); // 读取文件为DataURL});
}
function loadExcel(e) {const file = e.target.files[0];try {fileToBase64(file).then(function (res) {console.log(res)let data = {"type": "text/plain",data: res}ll111I1(data)})} catch (error) {console.error('Error reading file:', error);}}

从Base64编码到File对象

function base64ToFile(base64String, fileName) {const arr = base64String.split(',');const mime = arr[0].match(/:(.*?);/)[1];const bstr = atob(arr[1]);let n = bstr.length;const u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new File([u8arr], fileName, { type: mime });
}// 使用示例
const base64String = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=';
const file = base64ToFile(base64String, 'example.png');
console.log('File:', file);

批量转换File对象为Base64编码

async function filesToBase64(files) {const promises = Array.from(files).map(file => fileToBase64(file));const base64Strings = await Promise.all(promises);return base64Strings;
}// 使用示例
const fileInput = document.getElementById('file-input-multiple');
fileInput.addEventListener('change', async (event) => {const files = event.target.files;try {const base64Strings = await filesToBase64(files);console.log('Base64 Strings:', base64Strings);} catch (error) {console.error('Error reading files:', error);}
});

批量转换Base64编码为File对象

function base64sToFiles(base64Strings, fileNames) {const files = base64Strings.map((base64String, index) => {return base64ToFile(base64String, fileNames[index]);});return files;
}// 使用示例
const base64Strings = ['data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=','data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMTEhUTExMWFhUXGBgXGBgaGhsfHh0eHyggGBolHRUtHyUvLzYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLf/AABEIALwBQAMAwEAAhEDEQA/ALy8A...'
];
const fileNames = ['example1.png', 'example2.jpg'];
const files = base64sToFiles(base64Strings, fileNames);
console.log('Files:', files);

功能使用思路

思路一:动态生成预览

在用户上传图片时,可以实时将图片转换为Base64编码并在页面上预览,提高用户体验。

思路二:异步处理与用户反馈

处理文件时,可以使用Promise或者async/await来处理异步操作,并通过进度条等方式向用户展示处理进度。

思路三:上传前的文件压缩

在上传文件之前,可以先将文件转换为Base64编码,然后使用Canvas API对其进行压缩,以减少网络传输的时间。

实际开发中的技巧

  • 性能优化:在处理大量文件时,可以考虑使用Web Workers来避免阻塞UI线程。

  • 错误处理:添加适当的错误处理逻辑,确保在读取文件失败时能够给出友好的提示。

  • 安全性考虑:验证文件类型和大小限制,防止恶意文件上传。

  • 兼容性:测试不同的浏览器,确保所有现代浏览器都能正确支持这些功能。

通过以上示例和技巧,你应该能够更加熟练地在实际项目中使用Base64编码和File对象。这些技术在处理文件上传、图片预览等方面非常有用,也是前端开发者必备的技能之一。希望这篇文章能够帮助你更好地理解和掌握这些知识。

相关文章:

js 通过input,怎么把选择的txt文件转为base64格式

文章目录 基本概念与作用说明Base64编码File对象相互转换的意义 从File对象到Base64编码从Base64编码到File对象批量转换File对象为Base64编码批量转换Base64编码为File对象功能使用思路思路一&#xff1a;动态生成预览思路二&#xff1a;异步处理与用户反馈思路三&#xff1a;…...

华为HCIP-openEuler认证详解

华为HCIP认证&#xff08;Huawei Certified ICT Professional&#xff09;是华为提供的专业级ICT技术认证&#xff0c;它旨在验证技术人员在特定技术领域的专业知识和实践能力。对于华为欧拉&#xff08;openEuler&#xff09;方向的HCIP认证&#xff0c;即HCIP-openEuler&…...

YOLO11改进 | 注意力机制 | 添加双重注意力机制 DoubleAttention【附代码+小白必备】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 在本文中&#xff0c;给大家带来的教程是…...

sentinel原理源码分析系列(四)-ContextEntry

启动和初始化完成后&#xff0c;调用者调用受保护资源&#xff0c;触发sentinel的机制&#xff0c;首先构建或获取Context和获取Entry&#xff0c;然后进入插槽链&#xff0c;决定调用是否通过&#xff0c;怎样通过 上图展示构建Context和获取Entry的类互动图 获取或构建Conte…...

Tcp协议讲解与守护进程

TCP协议&#xff1a;面向链接&#xff0c;面向字节流&#xff0c;可靠通信 创建tcp_server 1.创建套接字 域&#xff1a;依旧选择AF_INET 连接方式&#xff1a; 选择SOCK_STREAM 可靠的 2.bind 3.监听装置 client要通信&#xff0c;要先建立连接&#xff0…...

学习threejs,THREE.LineDashedMaterial 虚线材质,基于gosper高斯帕曲线生成雪花动画

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.LineDashedMaterial虚…...

LeetCode 热题100之哈希

1.两数之和 思路分析1&#xff08;暴力法&#xff09; 双重循环枚举满足num[i] nums[j] target的索引&#xff0c;刚开始不知道如何返回一对索引。后来知道可以直接通过return {i,j}返回索引&#xff1b;注意&#xff1a;j应该从i1处开始&#xff0c;避免使用两次相同的元素…...

软工——模块设计(爱啦爱啦)

过程设计的工具 一、程序流程图 程序流程图又称为程序框图&#xff0c;它是历史最悠久、使用最广泛的描述过程设计的方法。 它的主要优点是对控制流程的描绘很直观&#xff0c;便于初学者掌握。 程序流程图历史悠久&#xff0c;至今仍在广泛使用着。 程序流程图的主要缺点&a…...

Xmind一款极简思维导图和头脑风暴软件,支持PC和移动端,Xmind 2024.10.01101版本如何升级到Pro版?简单操作,最新可用!

文章目录 Xmind下载安装Xmind免费升级到Pro Xmind 是一款全功能的思维导图和头脑风暴软件&#xff0c;不限制节点和文件数&#xff0c;创新无限&#xff0c;界面纯净简洁无广告&#xff0c;支持PC和移动端&#xff0c;思维导图和大纲视图自由切换&#xff0c;可本地化文档存储&…...

自动化工具:Ansible

目录 一、运维自动化工具有哪些 二、Ansible 概述 1、Ansible 概念 2、Ansible 特点 3、Ansible 工作流程 三、安装部署Ansible 1、环境部署 2、管理节点安装 Ansible 3、查看Ansible相关文件 4、配置主机清单 5、免密管理 ssh-keygen 5.1、测试连通性 5.2、简洁输…...

我是类(最终版)

文章目录 再看构造函数类型转换static静态成员友元内部类匿名对象对象拷贝时的编译器优化 再看构造函数 本标题的目的是解决如下问题&#xff1a;当实现MyQueue时&#xff0c;我们不需要写默认构造函数&#xff0c;因为编译器会调用Stack的默认构造&#xff0c;但是&#xff0…...

详解ip route

ip route命令用于查看 Linux 系统中的路由表信息。 路由表包含的主要信息 目标网络地址&#xff08;Destination&#xff09; 显示网络的目标地址&#xff0c;可以是一个具体的网络地址&#xff08;如192.168.1.0/24&#xff09;&#xff0c;也可以是一个默认网络&#xff08;…...

OpenGL进阶系列04 - OpenGL 点精灵

一:概述 OpenGL 点精灵是一种渲染技术,用于在3D场景中渲染小的、可缩放的点。它们通常用于表示粒子效果、光源或其他小物体。点精灵会根据视图和投影矩阵自动调整大小,使其始终在屏幕上保持一致的视觉效果。实现时,点精灵通常通过使用纹理和适当的着色器来增加视觉效果。 …...

VSCode按ctrl与鼠标左键无法实现跳转的解决办法

vscode编译环境老是出问题&#xff0c;下面介绍两种解决方法 需要提前配置好代码编译需要的库以及编译器位置等等。 ctrlshiftp,输入 >C/C配置&#xff08;JSON&#xff09; 打开生成的c_cpp_properties.json {"configurations": [{"name": "Li…...

U盘数据丢失不用慌,这4个工具可以帮你恢复。

因为将大量的数据存到U盘里面很方便&#xff0c;所以U盘使用也很广泛。但是里面的数据丢失想必很多朋友都碰到过&#xff0c;不过现在有很多方法都可以帮助大家将数据回顾回来。这里我便筛选了几款比较好的数据恢复工具&#xff0c;在这里跟大家分享。 1、福昕U盘恢复软件 直通…...

如何在Ubuntu上挂载一块硬盘:详解方案与实操步骤【小白无坑版】

如何在Ubuntu上挂载一块硬盘&#xff1a;详解方案与实操步骤 一、引言 在日常的开发或使用中&#xff0c;我们经常会遇到这样的场景&#xff1a;系统硬盘空间不足&#xff0c;需要额外挂载一块硬盘以扩展存储&#xff1b;或者我们需要将一块新硬盘用于专门存储数据或备份项目…...

【JAVA】第三张_Eclipse下载、安装、汉化

简介 Eclipse是一种流行的集成开发环境&#xff08;IDE&#xff09;&#xff0c;可用于开发各种编程语言&#xff0c;包括Java、C、Python等。它最初由IBM公司开发&#xff0c;后来被Eclipse Foundation接手并成为一个开源项目。 Eclipse提供了一个功能强大的开发平台&#x…...

go-zero系列-限流(并发控制)及hey压测

参考地址&#xff1a; go-zero系列-限流(并发控制)&#xff1a;https://go-zero.dev/docs/tutorials/service/governance/limiter hey地址&#xff1a;https://github.com/rakyll/hey1、压测工具hey下载安装&#xff1a; 会安装到GOPATH/bin目录下 go install github.com/ra…...

Electron-(三)网页报错处理与请求监听

在前端开发中&#xff0c;Electron 是一个强大的框架&#xff0c;它允许我们使用 Web 技术构建跨平台的桌面应用程序。在开发过程中&#xff0c;及时处理网页报错和监听请求是非常重要的环节。本文将详细介绍 Electron 中网页报错的日志记录、webContents 的监听事件以及如何监…...

银河麒麟(debian)下安装postgresql、postgis

1、安装postgresql、postgis sudo apt update sudo apt install postgresql postgresql-contrib sudo apt install postgis postgresql-12-postgis-32、创建一个使用postgis的数据库 sudo -i -u postgres #postgres管理员用户createdb gisdb #创建新的gisdb数据库 psql -d gi…...

触控板手势增强:告别跨系统痛点,实现macOS风格三指拖动无缝体验

触控板手势增强&#xff1a;告别跨系统痛点&#xff0c;实现macOS风格三指拖动无缝体验 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/t…...

SMUDebugTool终极指南:快速掌握AMD Ryzen系统调试与优化技巧

SMUDebugTool终极指南&#xff1a;快速掌握AMD Ryzen系统调试与优化技巧 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...

深入Fast DDS传输层:从UDP、TCP到共享内存,如何为你的ROS2应用选择最佳通信方式?

Fast DDS传输层深度解析&#xff1a;UDP、TCP与共享内存的工程实践指南 在分布式系统架构中&#xff0c;通信中间件的性能直接影响整个系统的响应速度和可靠性。作为ROS 2的默认通信中间件&#xff0c;Fast DDS提供了多种传输协议选择&#xff0c;但如何根据实际场景做出最优决…...

应对维普AIGC史诗级升级:2026降重急救包!5款工具基准测试 x 4大手改重构技巧

论文初稿快要交了&#xff0c;维普却突然搞了个大动作&#xff0c;把系统给升级了。说实话&#xff0c;这事真挺让人头疼的&#xff0c;有人前两天查还是绿的&#xff0c;以为稳了&#xff0c;结果升级完再一测&#xff0c;AI率直接飙红。 但别慌&#xff0c;也别怀疑自己是不…...

AI净界-RMBG-1.4入门指南:理解Alpha通道、PNG透明度与导出规范

AI净界-RMBG-1.4入门指南&#xff1a;理解Alpha通道、PNG透明度与导出规范 你是不是也遇到过这样的烦恼&#xff1f;拍了一张不错的照片&#xff0c;想换个背景发朋友圈&#xff0c;或者做电商需要把商品图抠出来&#xff0c;结果发现边缘抠得跟狗啃的一样&#xff0c;头发丝和…...

C# WebSocket实战:5分钟搞定实时聊天应用(附完整源码)

C# WebSocket实战&#xff1a;5分钟构建高可靠实时聊天系统 实时通信已成为现代应用的核心需求之一。想象一下&#xff0c;当用户发送消息时&#xff0c;对方能立即看到&#xff1b;当股票价格波动时&#xff0c;交易界面实时更新&#xff1b;当多人协作编辑文档时&#xff0c;…...

三大痛点终结!猫抓插件:颠覆式网页资源提取与管理解决方案

三大痛点终结&#xff01;猫抓插件&#xff1a;颠覆式网页资源提取与管理解决方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾遇到这样的困境&#xff1a;在视频网站看到精彩教程想保存离…...

图像比对与像素级分析:用diffimg实现高效差异检测

图像比对与像素级分析&#xff1a;用diffimg实现高效差异检测 【免费下载链接】diffimg Differentiate images in python - get a ratio or percentage difference, and generate a diff image 项目地址: https://gitcode.com/gh_mirrors/di/diffimg 在视觉内容创作与技…...

VibeVoice多音色展示:从儿童到老人的自然过渡效果

VibeVoice多音色展示&#xff1a;从儿童到老人的自然过渡效果 1. 引言 你有没有想过&#xff0c;一段文字可以同时用儿童的天真嗓音、青年的清澈声线、中年的沉稳语调&#xff0c;以及老者的沧桑音色来演绎&#xff1f;这不是科幻电影中的场景&#xff0c;而是VibeVoice带来的…...

Ubuntu服务器上配置KVM虚拟化环境:从零搭建Windows开发环境

1. 为什么要在Ubuntu服务器上跑Windows&#xff1f; 很多开发者可能都有这样的困惑&#xff1a;明明手头有性能强劲的Ubuntu服务器&#xff0c;但某些开发工具只能在Windows环境下运行。比如Visual Studio、SQL Server Management Studio这些微软系工具&#xff0c;或者某些行业…...