
FileReader 获取图片base64数据流 并 生成图片
检查 incoming 的 base64 数据是否以 提取数据部分:从 使用 检查解码后的图片数据是否损坏(如通过 接收 uploaded 的 Blob 数据。 对 Blob 数据进行 base64 编码。 对 base64 编码后的字符串进行验证,确保其为有效的图片数据。 存储 base64 编码的图片数据。
灵活性高:支持两种图片上传格式,适用于不同场景需求。 扩展性强:可以根据具体需求添加更多的图片格式或上传类型。 防止重复上传:通过文件名和保存路径的唯一性,避免重复上传同一图片。 支持在线预览:通过 base64 数据直接在前端预览图片,减少服务器负载(在图片小尺寸情况下)。
发布日期:2021-05-27 02:49:14
浏览次数:29
分类:精选文章
本文共 2857 字,大约阅读时间需要 9 分钟。
[ انتقال至:https://www.cnblogs.com/-mrl/p/8709843.html ]
图片上传处理方案(基于 PHP 且支持 base64 和 blob格式)
本文将详细介绍一个图片上传处理方案,该方案基于 PHP 并结合 jQuery 实现,支持两种图片上传格式:base64 数据流 和 Blob 数据流。此外,该方案还支持图片的上传、存储与检索等功能。
图片上传处理的技术实现
本方案的主要目标是实现图片的上传功能,结合两种不同的图片上传格式(base64 数据流 和 Blob 数据流),并在服务器端对图片进行存储,最后返回图片的访问地址。
1. 系统功能说明
- 图片上传类型检测:根据用户上传时指定的
stream_type
参数,判断图片是以 base64 数据流 还是 Blob 数据流 的形式进行上传。 - 图片数据解码:
- base64 数据流:通过
base64_to_blob
函数对 uploaded 的 base64 数据进行解码,返回 decode 后的二进制 blob 数据。 - Blob 数据流:直接将 uploaded 的 Blob 数据进行 base64 编码,并将其作为图片数据处理。
- base64 数据流:通过
- 图片存储与校验:对解码后的图片数据进行存储,同时进行图片校验(如图片损坏、格式不正确等),若校验失败则返回相应的错误信息。
- 返回图片访问地址:在图片上传与存储成功后,返回图片的访问地址和相关信息。
技术实现细节
1. base64 数据流处理
对于 base64 数据流 的上传,服务器端需要:
base64,
开头(如 data:image/png;base64,
)。base64,
之后截取字符串,解码为二进制图片数据。base64_decode
函数对 base64 数据进行解码。imagecreatefromstring
函数判断)。2. Blob 数据流处理
对于 Blob 数据流 的上传,服务器端的处理逻辑相对简单:
前端实现
1. 文件选择与上传
前端 [{""}] 用于文件选择,配合 FileReader 组件实现文件读取。核心代码如下:
const input = document.getElementById("imgfile");if (typeof FileReader === 'undefined') { alert("抱歉,你的浏览器不支持 FileReader,请使用现代浏览器操作!"); input.disabled = 'disabled';} else { input.addEventListener('change', readFile, false);}function readFile() { const file = this.files[0]; if (!/image\/*/.test(file.type)) { alert("只能选择图片"); return false; } const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function (e) { const base64Code = e.target.result; $('#showImg').attr('src', base64Code); console.log(base64Code); $.ajax({ type: 'POST', url: '?upload=img&stream_type=base64', data: { stream: base64Code }, datatype: 'json', beforeSend: function () { $('#msg').html('logining'); }, success: function (data) { alert(data); $('#msg').html(decodeURI(data)); }, complete: function () { // HideLoading(); }, error: function () { alert('请求出错处理'); } }); };}
2. AJAX 请求
前端 发送 POST 请求,传输图片数据,服务器端按照指定的数据流类型进行处理。通过 stream_type
参数判断是处理 base64 数据流 还是 Blob 数据流,并根据要求返回相应的图片地址。
服务器端处理逻辑
1. base64 数据流
- 解码检查:对 base64 数据进行解码和校验。
- 存储与返回:将解码后的图片数据存储到服务器,并返回图片的访问地址。
2. Blob 数据流
- base64 编码:将 Blob 数据转换为 base64 字符串。
- 存储与返回:验证 base64 数据的有效性,存储后返回图片的访问地址。
优势与特点
总结
本方案通过 PHP 和 jQuery 实现了图片的上传与存储功能,支持 base64 数据流 和 Blob 数据流 两种上传方式。服务器端对图片数据进行解码与校验,前端通过 AJAX 实现了文件读取与提交。该方案简单易实现,适用于需要在线图片上传的场景,例如用户个人资料图片上传、商品图片上传等。
如对本方案有疑问或需要进一步改进,请随时联系作者。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月23日 10时44分49秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
2024年全球顶尖杀毒软件,从零基础到精通,收藏这篇就够了!
2023-01-24
2024年最流行的十大开源渗透测试工具
2023-01-24
005从零开始学Python—字符串处理
2023-01-24
2024年网络安全八大前沿趋势,零基础入门到精通,收藏这篇就够了
2023-01-24
2024年薪酬最高的五个网络安全职位,零基础入门到精通,收藏这一篇就够
2023-01-24
2024年非科班的人合适转行做程序员吗?
2023-01-24
2024数字安全创新性案例报告,从零基础到精通,收藏这篇就够了!
2023-01-24
2024最新最全CTF入门指南(非常详细)零基础入门到精通,收藏这一篇就够了
2023-01-24
2024最新科普什么是大模型?零基础入门到精通,收藏这篇就够了
2023-01-24
2024最新程序员接活儿搞钱平台盘点
2023-01-24
2024最火专业解读:信息安全(非常详细)零基础入门到精通,收藏这一篇就够了
2023-01-24
(插播)unity的 异常捕捉和 ios Android 崩溃信息的捕捉。
2023-01-24
2024版最新SRC漏洞挖掘思路手法(非常详细),零基础入门到精通,收藏这一篇就够了
2023-01-24
2024版最新渗透测试零基础入门教程,带你入门到精通(超详细),收藏这篇就够了
2023-01-24
2024版最新网络安全入门必备读书清单(非常详细)零基础入门到精通,收藏这一篇就够了
2023-01-24
2024版最新网络安全教程从入门到精通,看完这一篇就够了
2023-01-24
0/1背包问题——从LeetCode题海中总结常见套路
2023-01-24
(原创)面向对象的系统对接接口编写。第5篇(完结)
2023-01-24
2024网络安全岗就业前景如何?零基础入门到精通,收藏这篇就够了
2023-01-24