【前端项目笔记】原生js上传文件及文件转换成base64、blob类型

简介: 项目中经常会用到上传图片上传视频等功能,由于后端nginx限制,经常要进行文件转化才能上传,大文件可能还要进行切片上传处理。

一.项目场景


项目中经常会用到上传图片上传视频等功能,由于后端nginx限制,经常要进行文件转化才能上传,大文件可能还要进行切片上传处理。


二.原生js实现上传功能的简单案例(上传图片)


1.html部分

<div class="about">
        <input type="file" accept=".png" id="files" style="display:none;">
        <img :src="imgSrc" alt="" @click="inputClick">
</div>


 2.js部分

inputClick () {
            // 触发上传文件的文件框
            document.getElementById('files').click();
            let that = this;
            document.getElementById('files').onchange = function (val) {
                that.imgfiles = val.target.files[0];
            }
            console.log(this.imgfiles);
        }


3.控制台打印结果

5143cf0985e041c9b2dabb02ae8814b3.png


三.将文件转化成base64、blob

1.base64:简单的来说base64就是一种二进制到文本的编译方式,base64不加密,浏览器加载快,但是他的大小要比原图片文件大,所以只有上传图片时建议大家转base64,视频文件的话就算了,低于50MB的视频大家也可以用base64。


getbase64 () {
            let reader = new FileReader();
            console.log(reader);
            reader.readAsDataURL(this.imgfiles);
            reader.onload = (e) => {
                this.imgSrcbase64 = e.target.result;
                console.log(this.imgSrcbase64);
            }
        }


打印结果:

5daa26a01ce445829cbe0a9a21f281be.png


2.Blob:Blob(Binary Large Object)表示二进制类型的大对象。blob经常被用作上传大文件,通过blob构造函数生成一个blob对象对文件进行处理,生成一个blob文件流,blob是加密的,这点和base64完全不同,它还可以用到切片,为了更直观的了解blob,废话不说了,我也不是太懂这玩意,直接上代码。

getblob () {
            let reader = new FileReader();
            reader.readAsArrayBuffer(this.imgfiles);
            reader.onload = (e) => {
                let data;
                if (typeof e.target.result === 'object') {
                    data = window.URL.createObjectURL(new Blob([e.target.result]));
                } else {
                    data = e.target.result;
                }
                this.imgBlob = data;
                console.log(this.imgBlob);
            }
        }


打印结果:

11d36a3e1fd6454db15a6a049bc58c5c.png

相关文章
|
8月前
|
编解码 JavaScript 前端开发
如何在网页播放英文的m3u8文件(基于Javascript搭建的在线网页工具)
什么是m3u8?又该如何在网页中高效、便捷地播放英文的m3u8文件呢?今天这篇文章就带你一起了解,并推荐一种基于Javascript搭建的在线网页工具,让你轻松解决播放问题。
2339 0
|
JavaScript 前端开发 API
Next.js 实战 (六):如何实现文件本地上传
这篇文章介绍了在Next.js中如何实现文件上传到本地的方法。文章首先提到Next.js官方文档中没有提供文件上传的实例代码,因此开发者需要自行实现,通常有两种思路:使用Node.js原生上传或使用第三方插件如multer。接着,文章选择了使用Node.js原生上传的方式来讲解实现过程,包括如何通过哈希值命名文件、上传到指定目录以及如何分类文件夹。然后,文章展示了具体的实现步骤,包括编写代码来处理文件上传,并给出了代码示例。最后,文章通过一个效果演示说明了如何通过postman模拟上传文件,并展示了上传后的文件夹结构。
466 0
Next.js 实战 (六):如何实现文件本地上传
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
921 0
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
742 0
|
前端开发 算法 测试技术
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
本文对比测试了通义千文、文心一言、智谱和讯飞等多个国产大模型在处理基础计数问题上的表现,特别是通过链式推理(COT)提示的效果。结果显示,GPTo1-mini、文心一言3.5和讯飞4.0Ultra在首轮测试中表现优秀,而其他模型在COT提示后也能显著提升正确率,唯有讯飞4.0-Lite表现不佳。测试强调了COT在提升模型逻辑推理能力中的重要性,并指出免费版本中智谱GLM较为可靠。
917 0
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
1439 14
|
JSON JavaScript 前端开发
JavaScript 项目构建工具 Grunt 实践:合并文件
   Grunt 是一个基于任务的 JavaScript 项目命令行构建工具,运行于 Node.js 平台。Grunt 能够从模板快速创建项目,合并、压缩和校验 CSS & JS 文件,运行单元测试以及启动静态服务器。
1178 0
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
189 0

热门文章

最新文章

下一篇
开通oss服务