网站首页 > 技术文章 正文
- 在通常的上传下载中,我们一般都是直接保存文件或图片(jpg,png,pdf,doc,mp3,zip等),今天我们换一种方式进行上传下载,即将上传的文件或图片保存为base64内容,前端再利用FileSaver.js进行下载。
关于FileSaver.js
- FileSaver.js在https://github.com/eligrey/FileSaver.js/文件库里有详细的操作说明,在此不再做赘述,不同环境按不同方式进行加入使用即可。
上传
- 我使用的上传后台是java(版本为java8)。先获得上传文件的InputStream,再装InputStream转化成byte[],再用Base64.getEncoder().encodeToString(content)转化成字符串存储起来。当然存储的内容还可包括文件名,后缀等。
下载
- 前端通过条件从后台取得相应下载内容的字符串,再将字符串转换成FileSaver.js中saveAs方法可接收的Blob内容,调用FileSaver.saveAs(blob, "test.pdf")方法则会弹出下载窗口进行下载。
如上内容有表述不明或不详尽或不同解决方案的敬请互动。有想探讨其它内容的也敬请留言,前端(node, js, koa等),后台(java,架构等)。
注:
前端js字符串转Blob方法
function b64toBlob (b64String, contentType, sliceSize)
{
contentType = contentType || '';
sliceSize = sliceSize || 512;
var byteCharacters = atob(b64String);
var byteArrays = [];
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize);
var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray)
}
return new Blob(byteArrays, {type: contentType});
}
相关引用代码:
var contentType = 'application/pdf';
var blob = b64toBlob(content, contentType);//content为后端返回的base64字符串
saveAs(blob, "barcode.pdf");
猜你喜欢
- 2024-10-03 windows系统搭建node.js Vue开发环境图文教程
- 2024-10-03 如何用JavaScript纯前端来实现下载脚本,让后端人员失业去吧
- 2024-10-03 一款思维导图显示编辑javascript类库jsmind
- 2024-10-03 你不知道的javascropt(上、下卷)pdf版下载领取
- 2024-10-03 前端实现最佳截图方案(上)(前端图文教程)
- 2024-10-03 下载文件并使用Javascript将其压缩在浏览器中「云图智联」
- 2024-10-03 我的世界手机版真实js下载(我的世界手机版真实js下载教程)
- 2024-10-03 原生JS封装拖动验证滑块你会吗?「实践」
- 2024-10-03 如何从网络上下载一张图片并保存到本地?
- 2024-10-03 前端工程化应该怎么做?Letjs工程化体系介绍
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)