一:上传之

首先,你必然得有一个 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字符串形式呈现图片的更多相关文章

  1. 强大的支持多文件上传的jQuery文件上传插件Uploadify

    支持多文件上传的jQuery文件上传插件Uploadify,目前此插件有两种版本即Flash版本和HTML5版本,对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持Fla ...

  2. jQuery文件上传插件Uploadify(转)

    一款基于flash的文件上传,有进度条和支持大文件上传,且可以多文件上传队列. 这款在flash的基础上增加了html5的支持,所以在移动端也可以使用. 由于官方提供的版本是flash免费,html5 ...

  3. 文件上传三:base64编码上传

    介绍三种上传方式: 文件上传一:伪刷新上传 文件上传二:FormData上传 文件上传三:base64编码上传 Flash的方式也玩过,现在不推荐用了. 优点: 1.浏览器可以马上展示图像,不需要先上 ...

  4. jQuery文件上传插件jQuery Upload File 有上传进度条

    jQuery文件上传插件jQuery Upload File 有上传进度条 jQuery文件上传插件jQuery Upload File,插件使用简单,支持单文件和多文件上传,支持文件拖拽上传,有进度 ...

  5. 20款最好的jQuery文件上传插件

    当它是关于开发网络应用程序和网页的时候,文件上传功能的重要性是不容忽视的.一个文件上传功能可以让你上传所有类型的文件在网站上,包括视频,图像,文件和更多.创建一个文件上传功能,对你的网站是不是很难,有 ...

  6. jQuery 文件上传插件:uploadify、swfupload

    jQuery 文件上传插件: uploadify.swfupload

  7. JQuery文件上传插件JQuery.upload.js的用法简介

    JQuery文件上传插件,这个插件很小,用法很简单,效果却很棒.注意:JQuery版本要求1.8及以上,大家执行如果没效果,则检查JQuery版本,如果是1.8及以上,则该插件源码中的.size()需 ...

  8. 可拖拽和带预览图的jQuery文件上传插件ssi-uploader

    插件描述:ssi-uploader是一款带预览图并且可以拖拽文件的jQuery ajax文件上传插件.该文件上传插件支持AJAX,支持多文件上传,可控制上的文件格式和文件大小,提供各种回调函数,使用非 ...

  9. jquery文件上传控件 Uploadify

    (转自 http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html) 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同 ...

随机推荐

  1. 自建YUM源以及相关维护

    yum相关概念我这里就不做详细的讲解了,就是一个软件包管理工具.在企业中,很多时候进行编译了自己的RPM包,在搭建YUM的时候,希望将自定义的RPM加入到YUM源中,从而出现了下列方法. 一.配置私有 ...

  2. mysql 函数group_concat()

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) .MySQL中group_concat函数完整的语法如下:group_c ...

  3. mysql 触发器(Trigger)简明总结和使用实例

    一,什么触发器 1,个人理解触发器,从字面来理解,一触即发的一个器,简称触发器(哈哈,个人理解),举个例子吧,好比天黑了,你开灯了,你看到东西了.你放炮仗,点燃了,一会就炸了.2,官方定义触发器(tr ...

  4. ref:Mysql授权远程登陆

    ref:https://blog.csdn.net/qq_26710805/article/details/79776897 在Windows环境上操作.步骤如下: 1. 打开cmd窗口,登陆mysq ...

  5. Java—String,StringBuffer,StringBuilde区别和操作

    Java语言有关字符串的类有三种 java.lang.String:一般作为简单字符串类型 java.lang.StringBuffer:字符串缓冲区 java.lang.StringBuider:字 ...

  6. 【BZOJ 3036】 3036: 绿豆蛙的归宿 (概率DP)

    3036: 绿豆蛙的归宿 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 491  Solved: 354 Description 随着新版百度空间的下线 ...

  7. BZOJ 1449: [JSOI2009]球队收益 最小费用最大流 网络流

    https://www.lydsy.com/JudgeOnline/problem.php?id=1449 给每条路加上一个权值,每条路的费用是这条路的流量*权值,求最大流的最小费用. 每次spfa记 ...

  8. java 反编译 android 反编译

    1. jad http://varaneckas.com/jad/jad158e.linux.intel.zip  下载jad, 给jad运行权限 ,运行 chmod a+x ./jad ./jad ...

  9. SmartGit 授权文件 Free Trial License to Non-Commercial

    To alter the license. First, go to Windows: %APPDATA%\syntevo\SmartGit\ OS X:    ~/Library/Preferenc ...

  10. 【BZOJ】4720: [Noip2016]换教室

    4720: [Noip2016]换教室 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1690  Solved: 979[Submit][Status ...