JQuery文件上传及以Base64字符串形式呈现图片
一:上传之
首先,你必然得有一个 file input,如下:
<td>
<img id="imgGif" style="display: none" />
<input type="file" id="imgGifFile" name="imgGifFile" value="选择图片" class="easyui-validatebox"
data-options="
@if (ViewBag.IsEdit != true)
{
@:required: true,missingMessage:'请选择课程图片!',
}
" />
</td>
其次,让我们 upload,如下:
$.ajaxFileUpload({
url: '@ViewBag.Domain/Course/CreateUpdate',
type: 'post',
data: otherObj,
secureuri: false,
fileElementId: 'imgGifFile',
dataType: 'json',
success: function (data) {
$("#courseBank").datagrid("reload");
if ($("#Id").val() != "") {
$.messager.alert("提示", "课程修改成功!");
} else {
$.messager.alert("提示", "课程添加成功!");
}
},
error: function () {
window.OnLoadFunc.isSaved();
$.messager.alert("提示", "服务器无响应,请稍后重试!");
}
});
其中,fileElementId 就是我们的 file input 的 Id 值,除此之外,如果我们要同时提交表单数据,则可以构建一个如上的 otherObj,是一个 json 对象。类似如下,
var result = {
Id: $("#Id").val(),
CategoryId: $("#categoryTree").tree("getSelected").id,
Name: $("#name").val};
那么,服务端代码如下:
public void CreateUpdate(Course course)
{
HttpPostedFileBase imgGifFile = Request.Files["imgGifFile"];
course.ImgGif = ImageHelper.GetImgByte(imgGifFile);
if (!string.IsNullOrEmpty(course.Id))
{
_courseDal.Update(course);
}
else
{
course.Id = Guid.NewGuid().ToString().Replace("-", string.Empty);
course.Creator = user.Id;
_courseDal.Insert(course);
}
}
服务器端,首先会自动根据 JSON 内容,构造 Course 对象,但是,文件需要通过 Request.Files["imgGifFile"]; 来进行获取的,获取完毕你就可以转成二进制存放到数据库。注意到ImageHelper,为一个帮助类,后面会专门贴出代码。
二:从数据库读出来并转为base64字符串,并在网页上呈现出来
先看前台代码:
$('#imgGif').attr("width", "100px");
$('#imgGif').attr("height", "100px");
$('#imgGif').attr("src", "@ViewBag.ImgGifSrc");
$('#imgGif').show();
$('#imgGif').after("<br/>");
无非就是ImgGifSrc,它是字符串如下:
ViewBag.ImgGifSrc = ImageHelper.Base64ImgToSrc(ViewBag.EditCourse.ImgGif);
现给出ImageHelper:
using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Web;namespace YHBJ.Utility.Web
{
public class ImageHelper
{
public static byte[] GetImgByte(HttpPostedFileBase imgFileBase)
{
if (imgFileBase != null && !string.IsNullOrEmpty(imgFileBase.FileName))
{
var len = imgFileBase.ContentLength;
byte[] bytes = null;
using (var obj = new BinaryReader(imgFileBase.InputStream))
{
bytes = obj.ReadBytes(len);
}if (bytes.Length > 2)
{
string fileclass = string.Empty;
try
{
fileclass = bytes[0].ToString(CultureInfo.InvariantCulture);
fileclass += bytes[1].ToString(CultureInfo.InvariantCulture);
}
catch
{
}String[] fileType = { "7173", //gif
"255216", //jpg
"6677" //bmp
};var flag = fileType.Any(t => fileclass == t);
if (flag)
{
return bytes;
}
}
}return null;
}public static string Base64ImgToSrc(byte[] imgBytes)
{
if (imgBytes == null)
{
return string.Empty;
}using (var stream = new MemoryStream(imgBytes))
{
using (var image = System.Drawing.Image.FromStream(stream))
{
return string.Format(
"data:image/{0};base64,{1}",
GetImageExtension(image),
Convert.ToBase64String(imgBytes));
}
}
}private static string GetImageExtension(System.Drawing.Image image)
{
var imgFormatList = typeof(ImageFormat).GetProperties(BindingFlags.Static | BindingFlags.Public);foreach (var item in imgFormatList)
{
var imgFormat = (ImageFormat)item.GetValue(null, null);
if (imgFormat.Guid.Equals(image.RawFormat.Guid))
{
return item.Name.ToLower();
}
}return "gif";
}
}
}
要注意的是,base64格式的图片,有上限限制,默认多少来着,Anyway,bing之。
另,check图片格式:
if ($("#imgGifFile").val() != "") {
var strRegex = "(.gif|.GIF)$"; //用于验证图片扩展名的正则表达式
var re = new RegExp(strRegex);
if (!re.test($("#imgGifFile").val())) {
$.messager.alert("提示", "必须是gif图片!");
return false;
}
}
JQuery文件上传及以Base64字符串形式呈现图片的更多相关文章
- 强大的支持多文件上传的jQuery文件上传插件Uploadify
支持多文件上传的jQuery文件上传插件Uploadify,目前此插件有两种版本即Flash版本和HTML5版本,对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持Fla ...
- jQuery文件上传插件Uploadify(转)
一款基于flash的文件上传,有进度条和支持大文件上传,且可以多文件上传队列. 这款在flash的基础上增加了html5的支持,所以在移动端也可以使用. 由于官方提供的版本是flash免费,html5 ...
- 文件上传三:base64编码上传
介绍三种上传方式: 文件上传一:伪刷新上传 文件上传二:FormData上传 文件上传三:base64编码上传 Flash的方式也玩过,现在不推荐用了. 优点: 1.浏览器可以马上展示图像,不需要先上 ...
- jQuery文件上传插件jQuery Upload File 有上传进度条
jQuery文件上传插件jQuery Upload File 有上传进度条 jQuery文件上传插件jQuery Upload File,插件使用简单,支持单文件和多文件上传,支持文件拖拽上传,有进度 ...
- 20款最好的jQuery文件上传插件
当它是关于开发网络应用程序和网页的时候,文件上传功能的重要性是不容忽视的.一个文件上传功能可以让你上传所有类型的文件在网站上,包括视频,图像,文件和更多.创建一个文件上传功能,对你的网站是不是很难,有 ...
- jQuery 文件上传插件:uploadify、swfupload
jQuery 文件上传插件: uploadify.swfupload
- JQuery文件上传插件JQuery.upload.js的用法简介
JQuery文件上传插件,这个插件很小,用法很简单,效果却很棒.注意:JQuery版本要求1.8及以上,大家执行如果没效果,则检查JQuery版本,如果是1.8及以上,则该插件源码中的.size()需 ...
- 可拖拽和带预览图的jQuery文件上传插件ssi-uploader
插件描述:ssi-uploader是一款带预览图并且可以拖拽文件的jQuery ajax文件上传插件.该文件上传插件支持AJAX,支持多文件上传,可控制上的文件格式和文件大小,提供各种回调函数,使用非 ...
- jquery文件上传控件 Uploadify
(转自 http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html) 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同 ...
随机推荐
- linux虚拟机磁盘不够用以及进行扩容时遇到的问题
我使用的是:gparted live cd工具 系统是centOS6.2 使用gparted live cd工具进行无损分区,方法很简单,下载iso文件都在VMware对应的linux系统上设置CD ...
- ansible安装过程遇到的问题
1.出现Error: ansible requires a json module, none found! SSH password: 192.168.24.15 | FAILED >> ...
- 46:求1+2+...+n
/** * 面试题46:求1+2+...+n * 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). */ ...
- Windows-caffe配置
我在博客园的第一篇博客开始了,好紧张,好激动,好淫荡...哈哈O(∩_∩)O哈! 下面开始进入正题.配置环境为windows7+cuda7.5+vs2013+matlab2014a 之前用的happy ...
- CSUOJ 1900 锋芒不露
Description 小闪最近迷上了二刀流--不过他耍的其实是剑--新买了一个宝库用来专门存放自己收集的双剑.一对剑有两把,分只能左手用的和只能右手用的,各自有一个攻击力数值.虽然一对剑在小闪刚拿到 ...
- CSUOJ 1007 矩形着色
Description Danni想为屏幕上的一个矩形着色,但是她想到了一个问题.当点击鼠标以后电脑是如何判断填充的区域呢? 现在给你一个平面直角坐标系,其中有一个矩形和一个点,矩形的四条边均是平行于 ...
- C语言初始化
注意:为什么要进行C语言环境的初始化?在没有进行C语言环境的初始化之前的初始化工作都是用汇编进行初始化的.比如核心初始化,和内存初始化 栈:栈帧:一个进程中一般会有多个函数,每一个函数都需要在内存中开 ...
- 牛可乐发红包脱单OI赛 C 小可爱表白
打个暴力查一下OEIS,5min做完 出题人一开始把式子打错了,一开始的式子的结果为$n * (n + 3) * 2^{n - 3}$ 我们考虑化式子 首先考虑 $\sum\limits_{j = 1 ...
- HNOI2018 两天扫雷训练营
Day -1 不知道干什么 学了下插头DP,随意看了几道题 Day 0 还是不知道干什么 打了一天的模板,1700多行.... 随意学了下回文树 Day 1 上午:各种丢人(好像没人注意) 电脑一开就 ...
- 【推导】【数学期望】【冒泡排序】Petrozavodsk Winter Training Camp 2018 Day 5: Grand Prix of Korea, Sunday, February 4, 2018 Problem C. Earthquake
题意:两地之间有n条不相交路径,第i条路径由a[i]座桥组成,每座桥有一个损坏概率,让你确定一个对所有桥的检测顺序,使得检测所需的总期望次数最小. 首先,显然检测的时候,是一条路径一条路径地检测,跳跃 ...