读书人

IE 中下传前按比例预览图片

发布时间: 2012-11-14 10:12:19 作者: rapoo

IE 中上传前按比例预览图片

引言

在上一篇 jQuery + ashx 实现图片按比例预览、异步上传及显示 中核心是使用 HTML5 的 FileReader对象来实现。

但现在恶心的 IE 浏览器对HTML5支持太差,遂请教 google 大师,发现 juqey 中有个jquery.ajaxfileupload.js插件可实现无刷性上传文件,

此插件的原理是在文档中创建iframe和form,然后再将文件上传到服务器进行处理,并异步返回信息到客户端。

参考资料地址:

    Asp.net使用ajax无刷新上传文件jquery ajaxFileUpload.js 插件在IE9中的bug修复
思路当浏览器为IE时,使用jquery 的ajaxfileupload插件上传到服务器由 ashx 转换为 base64 ,然后再返回客户端按比例显示。这样浏览器就可以支持该死的 IE 啦!
代码下载ajaxfileupload 插件及示例 (官网的jquery ajaxfileupload 插件测试未通过)。
1.修改上一篇中的 readURL 函数如下:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.IO;    /// <summary>    /// uploader 的摘要说明    /// </summary>    public class uploader : IHttpHandler    {        public void ProcessRequest(HttpContext context)        {            context.Response.ContentType = "text/plain";            context.Response.Charset = "utf-8";            try            {                HttpPostedFile file = context.Request.Files[0];                byte[] buffer = null;                string base64 = "data:image/jpeg;base64,";                if (file != null)                {                    buffer = getByte(file);                    base64 += Convert.ToBase64String(buffer);                }                //context.Response.Write(base64);                context.Response.Write(@base64);            }            catch (Exception ex)            {                context.Response.Write("0");            }        }        private byte[] getByte(HttpPostedFile file)        {            byte[] buffer = new byte[file.ContentLength];            file.InputStream.Read(buffer, 0, buffer.Length);            return buffer;        }        public bool IsReusable        {            get            {                return false;            }        }    }


读书人网 >Web前端

热点推荐