文件上传三:base64编码上传

介绍三种上传方式:

文件上传一:伪刷新上传

文件上传二:FormData上传

文件上传三:base64编码上传

Flash的方式也玩过,不喜欢不拿来说了。

优点:

1.浏览器可以马上展示图像,不需要先上传到服务端,减少服务端的垃圾图像

2.前端可以压缩、处理后上传到服务端,减少传输过程中的等待时间和服务器压力

缺点:

1.生成编码后保存成图片,倘若不做处理,会比原来的图片容量大,具体原因,搜索关键词:Base64编码为什么会使数据量变大

2.图片越大生成的编码越多,编码越多开发者工具中查看它时卡顿越久,谷歌浏览器好点,360极速直接假死。也就是说会影响前端调试。

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5     <title></title>
 6     <style>
 7         td {
 8             padding: 10px;
 9         }
10     </style>
11 </head>
12 <body>
13
14     <table>
15         <tr>
16             <td>选择图片:</td>
17             <td><input type="file" id="file1" /></td>
18         </tr>
19         <tr>
20             <td>原图预览:</td>
21             <td id="ytyl"></td>
22         </tr>
23         <tr>
24             <td></td>
25             <td><input type="button" value="压缩" id="btnYaSuo" /></td>
26         </tr>
27         <tr>
28             <td>压缩预览:</td>
29             <td id="ysyl"></td>
30         </tr>
31         <tr>
32             <td></td>
33             <td><input type="button" value="上传" id="btnUpload" /></td>
34         </tr>
35     </table>
36
37     <canvas id="myCanvas" style="display:none">
38         Your browser does not support the HTML5 canvas tag.
39     </canvas>
40
41     <script>
42
43         file1.onchange = function () {
44             if (file1.files.length < 1 || !/image\/\w+/.test(file1.files[0].type)) {
45                 //判断格式正则:/image\/png/,/image\/jpeg/,/image\/gif/
46                 alert("请确保文件为图像类型");
47                 return;
48             }
49             var reader = new FileReader();
50             reader.readAsDataURL(file1.files[0]);
51             reader.onload = function (e) {
52                 var result = e.target.result;
53                 if (result && result.length > 0) {
54                     ytyl.innerHTML = ‘<img src="‘ + result + ‘" id="img1" />‘;
55                 }
56             };
57         };
58
59         btnYaSuo.onclick = function () {
60             var imgobj = document.getElementById("img1");
61             var canvas = document.getElementById("myCanvas");
62             canvas.width = imgobj.width;
63             canvas.height = imgobj.height;
64             var context = canvas.getContext("2d");
65             context.drawImage(imgobj, 0, 0, canvas.width, canvas.height);
66             //取值:image/jpeg、image/png(默认值)
67             var dataUrl = canvas.toDataURL("image/jpeg", 0.9);
68             ysyl.innerHTML = ‘<img src="‘ + dataUrl + ‘" id="img2" />‘;
69         };
70
71         btnUpload.onclick = function () {
72             //var imgobj = document.getElementById("img1"); //未压缩的图像
73             var imgobj = document.getElementById("img2");
74             if (!imgobj) {
75                 return;
76             }
77             //做为普通的字符串POST到服务端
78             var data = { "FileData": imgobj.getAttribute("src") };
79             //$.post("Handler1.ashx", data, function (res) { }, "json");
80         };
81
82     </script>
83
84 </body>
85 </html>

Handler1.ashx的处理:

 1 public void ProcessRequest(HttpContext context)
 2         {
 3             string base64Code = context.Request.Form["FileData"];
 4             if (string.IsNullOrEmpty(base64Code))
 5             {
 6                 context.Response.Write("{\"Msg\":\"请上传文件!\"}");
 7                 context.Response.End();
 8             }
 9
10             string ext = string.Empty;
11             if (base64Code.Contains("data:image/jpeg;base64,"))
12             {
13                 ext = ".jpg";
14                 base64Code = base64Code.Substring(23);
15             }
16             else if (base64Code.Contains("data:image/png;base64,"))
17             {
18                 ext = ".png";
19                 base64Code = base64Code.Substring(22);
20             }
21             else
22             {
23                 context.Response.Write("{\"Msg\":\"文件格式只支持JPG、PNG!\"}");
24                 context.Response.End();
25             }
26
27             DateTime now = DateTime.Now;
28             string fileName = Guid.NewGuid().ToString() + ext;
29             string relPath = string.Format("/Upload/{0}{1}{2}/", now.Year.ToString(), now.Month.ToString(), now.Day.ToString());
30             string absPath = HttpContext.Current.Request.MapPath("~" + relPath);
31             if (!Directory.Exists(absPath))
32             {
33                 Directory.CreateDirectory(absPath);
34             }
35             byte[] arr = Convert.FromBase64String(base64Code);
36             MemoryStream ms = new MemoryStream(arr);
37             new Bitmap(ms).Save(absPath + fileName);
38
39             context.Response.Write("{\"Msg\":\"上传成功!\",\"Path\":\"" + relPath + fileName + "\"}");
40             context.Response.End();
41         }
时间: 2024-11-17 23:21:12

文件上传三:base64编码上传的相关文章

文件上传三:FormData上传

介绍三种上传方式: 文件上传一:伪刷新上传 文件上传二:FormData上传 文件上传三:base64编码上传 Flash的方式也玩过,不喜欢不拿来说了. 等待编辑...

java对文件的二进制流base64编码解码

1.java对文件的二进制流base64编码解码 一般保存文件的时候选择的方式是将url存进数据库.今天遇到一个对接传文件流的二进制base64编码,简单记录一下. 依赖于commons-io包和commons-codec包. 编码的方法如下: public static String encodeFile(File file) throws IOException { byte[] readFileToByteArray = FileUtils.readFileToByteArray(file

Android个人中心的头像上传,图片编码及截取

首先需要有网络权限,然后我们这里匹配的网络请求是之前封装好的Okhttp,Okhttp的下载地址 非常的简单方便,直接复制进去,依赖一下包,然后调用方法即可. 这里是把图片转换成Base64.decode(imageString, Base64.DEFAULT); 转成Base64编码上传.具体内容也不少,需要完全整明白,还是要花点时间慢慢看的. 先看看简单的效果图: 那么万事具备,只欠东风了.直接上代码: public class MainActivity extends AppCompatA

Java Base64编码存在\n\r情况

今天开发遇到一个情况:服务器上生成的Base64编码和我本地生成的不一样(回车换行符的差别),后来网上搜了下,自己测试了下,先把结果记录如下: 网上搜索结果:Base64一行不能超过76字符,超过则添加回车换行符.回车换行符(\r\n)"是在Windows才有,而Linux只有换行(\n),Mac只有回车(\r). 自己测试结果: 此处我对jdk提供的两个base64编码的类进行了测试:sun.misc.BASE64Encoder 和 java.util.Base64. 测试环境:windows

python将图片进行BASE64编码

import base64 f=open(r'a:\a.jpg','rb') #二进制方式打开图文件 ls_f=base64.b64encode(f.read()) #读取文件内容,转换为base64编码 f.close() print ls_f

.NET实现字符串base64编码

using System; using System.Text; using System.IO; using System.Security; using System.Security.Cryptography; namespace Tgnet.Base.Security { /**//// <summary> /// 有关Base64编码算法的相关操作 /// </summary> /// <example>如下的示例为对一个字符串进行Base64编码,并返回编码

python 将图片转换为base64编码转储进数据库

# _*_ coding: utf-8 _*_#中间件:拓展工具遍历文件夹,对文件夹图片进行base64编码,写入数据库,并且读取查找方法__author__ = 'wf15038'__date__ = "2018/8/28 18:38" import pymysqlimport sysfrom datetime import datetimeimport base64import os now = datetime.now().strftime('%Y-%m-%d %H:%M:%S'

上传base64编码文件

1.js进行图片预览 使用input标签来选择图片,使用FileReader读取图片并转成base64编码,然后发送给服务器. <html> <body> <img id="image"src=""/> <br/> <input type="file"onchange="selectImage(this);"/> <br/> <input type=

js实现图片上传预览功能,使用base64编码来实现

实现图片上传的方法有很多,这里我们介绍比较简单的一种,使用base64对图片信息进行编码,然后直接将图片的base64信息存到数据库. 但是对于系统中需要上传的图片较多时并不建议采用这种方式,我们一般会选择存图片路径的方式,这样有助于减小数据库压力,base64 编码后的图片信息是一个很长的字符串,一般我们使用longText类型来将其存入数据库. html代码如下: <div class="col-sm-6"> <img id="headPortraitI