文件上传三:base64编码上传
介绍三种上传方式:
优点:
1.浏览器可以马上展示图像,不需要先上传到服务端,减少服务端的垃圾图像
2.前端可以压缩、处理后上传到服务端,减少传输过程中的等待时间和服务器压力
缺点:
1.生成编码后保存成图片,倘若不做处理,会比原来的图片容量大,具体原因,搜索关键词:Base64编码为什么会使数据量变大
2.图片越大生成的编码越多,编码越多开发者工具中查看它时卡顿越久,谷歌浏览器好点,360极速直接假死。也就是说会影响前端调试。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style>
td {
padding: 10px;
}
</style>
</head>
<body> <table>
<tr>
<td>选择图片:</td>
<td><input type="file" id="file1" /></td>
</tr>
<tr>
<td>原图预览:</td>
<td id="ytyl"></td>
</tr>
<tr>
<td></td>
<td><input type="button" value="压缩" id="btnYaSuo" /></td>
</tr>
<tr>
<td>压缩预览:</td>
<td id="ysyl"></td>
</tr>
<tr>
<td></td>
<td><input type="button" value="上传" id="btnUpload" /></td>
</tr>
</table> <canvas id="myCanvas" style="display:none">
Your browser does not support the HTML5 canvas tag.
</canvas> <script> file1.onchange = function () {
if (file1.files.length < 1 || !/image\/\w+/.test(file1.files[0].type)) {
//判断格式正则:/image\/png/,/image\/jpeg/,/image\/gif/
alert("请确保文件为图像类型");
return;
}
var reader = new FileReader();
reader.readAsDataURL(file1.files[0]);
reader.onload = function (e) {
var result = e.target.result;
if (result && result.length > 0) {
ytyl.innerHTML = '<img src="' + result + '" id="img1" />';
}
};
}; btnYaSuo.onclick = function () {
var imgobj = document.getElementById("img1");
var canvas = document.getElementById("myCanvas");
canvas.width = imgobj.width;
canvas.height = imgobj.height;
var context = canvas.getContext("2d");
context.drawImage(imgobj, 0, 0, canvas.width, canvas.height);
//取值:image/jpeg、image/png(默认值)
var dataUrl = canvas.toDataURL("image/jpeg", 0.9);
ysyl.innerHTML = '<img src="' + dataUrl + '" id="img2" />';
}; btnUpload.onclick = function () {
//var imgobj = document.getElementById("img1"); //未压缩的图像
var imgobj = document.getElementById("img2");
if (!imgobj) {
return;
}
//做为普通的字符串POST到服务端
var data = { "FileData": imgobj.getAttribute("src") };
//$.post("Handler1.ashx", data, function (res) { }, "json");
}; </script> </body>
</html>
Handler1.ashx的处理:
public void ProcessRequest(HttpContext context)
{
string base64Code = context.Request.Form["FileData"];
if (string.IsNullOrEmpty(base64Code))
{
context.Response.Write("{\"Msg\":\"请上传文件!\"}");
context.Response.End();
} string ext = string.Empty;
if (base64Code.Contains("data:image/jpeg;base64,"))
{
ext = ".jpg";
base64Code = base64Code.Substring();
}
else if (base64Code.Contains("data:image/png;base64,"))
{
ext = ".png";
base64Code = base64Code.Substring();
}
else
{
context.Response.Write("{\"Msg\":\"文件格式只支持JPG、PNG!\"}");
context.Response.End();
} DateTime now = DateTime.Now;
string fileName = Guid.NewGuid().ToString() + ext;
string relPath = string.Format("/Upload/{0}{1}{2}/", now.Year.ToString(), now.Month.ToString(), now.Day.ToString());
string absPath = HttpContext.Current.Request.MapPath("~" + relPath);
if (!Directory.Exists(absPath))
{
Directory.CreateDirectory(absPath);
}
byte[] arr = Convert.FromBase64String(base64Code);
MemoryStream ms = new MemoryStream(arr);
new Bitmap(ms).Save(absPath + fileName); context.Response.Write("{\"Msg\":\"上传成功!\",\"Path\":\"" + relPath + fileName + "\"}");
context.Response.End();
}
文件上传三:base64编码上传的更多相关文章
- JS中使用base64编码上传下载文件
下载文件:使用FileSaver.js https://github.com/eligrey/FileSaver.js/blob/master/README.md 手机端UC浏览器无法下载 安卓 ...
- 文件上传 和 base64编码
base64编码 1.关于Base64编码 : https://www.cnblogs.com/liyiwen/p/3814968.html (个人猜测),file表单发送文件,肯定是将文件转换为 ...
- HTML5 JS 压缩图片,并取得图片的BASE64编码上传
基本过程 1) 调用 FileReader 的 reader.readAsDataURL(img); 方法, 在其onload事件中, 将用户选择的图片读入 Image对象. 2) 在image对象的 ...
- 读取一个文件,将其Base64编码,每76个字符加一个换行(转)
echo chunk_split(base64_encode(file_get_contents('base64.txt'))); 例子 1 本例分隔每个字符,并添加 ".": & ...
- 文件上传二:FormData上传
介绍三种上传方式: 文件上传一:伪刷新上传 文件上传二:FormData上传 文件上传三:base64编码上传 Flash的方式也玩过,现在不推荐用了. 真正的异步上传,FormData的更多操作,请 ...
- 小谢第7问:js前端如何实现大文件分片上传、上传进度、终止上传以及删除服务器文件?
文件上传一般有两种方式:文件流上传和base64方式上传,毫无疑问,当进行大文件上传时候,转为base64是不现实的,因此用formData方式结合文件流,直接上传到服务器 本文主要结合vue的来讲解 ...
- Base64编码知识详解
在我们进行前端开发时,针对项目优化,常会提到一条:针对较小图片,合理使用Base64字符串替换内嵌,可以减少页面http请求. 并且还会特别强调下,必须是小图片,大小不要超过多少KB,等等. 那么,B ...
- java处理图片base64编码的相互转换
转载自http://www.cnblogs.com/libra0920/p/5754356.html 直接上代码 import sun.misc.BASE64Decoder; import sun.m ...
- Java对网络图片/本地图片转换成Base64编码和解码
一.将本地图片转换成Base64编码字符串 /** * 将本地图片转换成Base64编码字符串 * * @param imgFile 图片目录路径 * @return */ public static ...
随机推荐
- C# 如何解析XML
- 亲测可用的优雅的在已经安装了python的Ubuntu上安装python3.5
我的Ubuntu上已经安装了python2.7和3.4. 用以下方法可以方便的顺利的安装python3.5,使用的时候也不会发生冲突. 一条一条输入以下语句 wget https://www.pyth ...
- Adam Harley的卷积神经网络3D视觉化模型
https://m.huxiu.com/article/138857/1.html 最近 Google Tensorflow 做了一个非常直观的神经网络 playground.不夸张地说,现在每个人都 ...
- 从零开始のcocos2dx生活(四)ActionManager
文章目录 初始化构造函数 析构函数 删除哈希元素 分配存放动作对象的空间 通过索引移除动作 暂停动作 恢复动作 暂停所有的动作 恢复所有的动作 添加动作 移除所有的动作 移除target中的所有动作 ...
- 机器学习——EM算法与GMM算法
目录 最大似然估计 K-means算法 EM算法 GMM算法(实际是高斯混合聚类) 中心思想:①极大似然估计 ②θ=f(θold) 此算法非常老,几乎不会问到,但思想很重要. EM的原理推导还是蛮复杂 ...
- C#反射与特性(二):探究反射
目录 1,反射的使用概述 2,获取 Type 在上一章中,我们探究了 C# 引入程序集的各种方法,这一章节笔者将探究 C# 中使用反射的各种操作和代码实践. 1,反射的使用概述 1.1 什么是反射 & ...
- bootstrap4.4 Stretched link的使用
Stretched link功能介绍:扩大可点击区域. 原理 .stretched-link::after { position: absolute; top: 0; right:0; bottom: ...
- 微信小程序吸顶功能
---------------------------HTML------------------------ <view class="navbar-wrap"> ...
- 【转】python及其工具包安装基本流程
昨天晚上在家里的旧电脑上安装了<利用python进行数据分析>的部分环境,遇到若干问题,在此予以记录. 部分细节转:http://blog.csdn.net/huanbia/article ...
- Android Gradle脚本从Groovy迁移到Kotlin DSL
Android Gradle从Groovy迁移到Kotlin Android项目用Gradle构建, 其脚本语言之前是Groovy, 目前也提供了Kotlin的支持, 所以可以迁移到Kotlin. 官 ...