最近在开发过程中遇到了一个非常郁闷的问题,就是图片传到fileUpload中时想要实现回显到image控件中。

在前台,fileUpload.change()事件中判断fileUpload.val()不为空,把改路径值赋给image.attr("src",$('#fileUpload的ID').val()),

IE和火狐都无法实现,反而2345王牌浏览器可以实现读取本地路径的功能,

再用ajax异步调用函数,获取本地路径后再返回本地路径,同样无法实现,估计是跟浏览器的权限有关。

那么重点开始了,现在采用其他思路试试吧。

先来给fileUpload的change事件绑定一个upload的javascript函数,

//上传照片
        function upload() {
            var u = "";
            var options = {
                url: "../services/upload.ashx",//处理程序路径
                type: "post",success: function (msg) {//回调函数--请求成功
                    if (msg.toString().substring(0,3) == "ERR") {//
                        alert(msg.substring(3,msg.length));
                    }
                    else {
                        $("#img_tx").attr("src",msg);//回显图片
                    }
                },error:function(err){
                    alert("123");
            }
            };
            //将options传给ajaxForm
            $('#form1').ajaxSubmit(options);
        }

在这个函数中,我们调用了upload.ashx处理程序,该程序实现代码如下:

因为这里采用Session传递文件名,所以一定要引用IRequiresSessionState接口

同时添加下面三个引用

using System.Drawing;

using System.Web.SessionState;

using System.Web.Services;

public class upload : IHttpHandler,IRequiresSessionState
    {

       
        /// <summary>
        /// 上传照片
        /// </summary>
        /// <param name="context"></param>
        public void ProcessRequest(HttpContext context)
        {
            HttpFileCollection files = context.Request.Files;
            string path = "";//照片路径
            bool errorflag = true;
            string tishi = "";
            if (files.Count > 0)//Form中获取文件对象
            {
                HttpPostedFile file = files[0];
                if (file.ContentLength > 0)//文件大小大于零
                {
                    string fileName = file.FileName;//文件名
                    int fileSize = file.ContentLength;//文件大小
                    if (fileName.Substring(fileName.Length - 4,4).ToLower() == ".jpg")//只支持.jpg文件上传
                    {
                        try
                        {
                            Bitmap bitmap = new Bitmap(file.InputStream);//获取图片文件
                            if (bitmap.Width > 480 || bitmap.Height > 640)
                            {
                                errorflag = false;
                                tishi = "照片太大,请将照片调整为320*240像素尺寸!";
                            }
                            if (bitmap.Width < 120 || bitmap.Height < 160)
                            {
                                errorflag = false;
                                tishi = "照片太小,请将照片调整为320*240像素尺寸!";
                            }
                            if (bitmap.Width > bitmap.Height)
                            {
                                errorflag = false;
                                tishi = "照片的宽度比不符合要求,请将高度比调整为4:3!";
                            }
                            if (fileSize > 100 * 1024)
                            {
                                errorflag = false;
                                tishi = "照片的大小不符合要求,请将照片调整为100kb以内!";
                            }
                        }
                        catch
                        {
                            errorflag = false;
                            tishi = "照片错误,上传文件非图像文件!";
                        }
                    }
                    else
                    {
                        errorflag = false;
                        tishi = "照片格式错误,请上传JPG格式照片文件!";
                    }
                }
            }
            else
            {
                errorflag = false;
                tishi = "照片错误,上传照片文件为0字节!";
            }
            if (errorflag)
            {
                string extension = ".jpg";
                context.Session["zpname"] = Guid.NewGuid().ToString();//创建唯一文件名
                path = "../zhaopian/" + context.Session["zpname"].ToString() + extension;//指定保存路径以及文件名,也就是完整相对路径
                files[0].SaveAs(System.Web.HttpContext.Current.Server.MapPath(path));//保存文件(将相对路径转化为绝对路径)
                context.Response.Write(path);//相应给客户端该照片的相对路径

            }
            else
            {
                context.Response.Write("ERR" + tishi);
            }

        }
<span style="font-size:24px;background-color: rgb(255,102,102);"><strong>到这里,我们已经能够实现当用户选择路径之后回显到界面的功能了。</strong></span>
下面附加一个功能模块,将照片以及用户修改的信息添加到数据库中。
首先,看一下前台是如何使用ajax调用后台函数的:
<pre class="html" name="code">//Document.ready()
        $(function () {
             //保存用户修改信息
            $('#b_xgxx').click(function () {
                var upzp = false;//默认不上传照片
                if ($('#fu_tx').val() != "") {//如果fileUpload有路径,就指定上传照片
                    upzp = true;
                }
                $.ajax({
                    url: "../services/WebService.asmx/modify_ZJXX",type: "post",contentType: "application/json;charset=utf-8",dataType: 'json',async: false,data: "{xm:'"+$('#t_xm').val()+"',sclydm:'"+$('#t_sclydm').val()+"',zhwt:'"+$('#t_zhwt').val()+"',zjjs:'"+$('#t_zjjs').val()+"',upzp:"+upzp+"}",success: function (response) {
                        if (response.d != "") {
                            alert(response.d);
                        }
                    },error:function(err){
                        alert(err);
                }
                })

            });
在提交按钮按下事件中,首先判断fu_tx是否有值,如果有就上传照片,如果没有,就不用上传照片,只上传其他信息
然后,看一下后台modefy_ZJXX函数的写法:
<p>[WebMethod(EnableSession = true)]
 public string modify_ZJXX(string xm,string sclydm,string zhwt,string zjjs,bool upzp)
 {
 Model.T_ZHUANJIA model = (Model.T_ZHUANJIA)Session["ZJXX"];
 string tishi = "";
 if (upzp == true)
 {
 //获取图片信息
 if (Session["zpname"].ToString().Trim() == "")
 {
 tishi = "请选择需要上传的照片";
 }
 else
 {
 //获取绝对路径
 string path = Server.MapPath("~/web/zhaopian/" + Session["zpname"].ToString() + ".jpg");
 //读取照片文件
 FileStream fs = new FileStream(path,FileMode.Open,FileAccess.Read);
 Byte[] bytes=new byte[fs.Length];
 fs.Read(bytes,(int)fs.Length);
 fs.dispose();//释放资源
 fs.Close();//关闭文件流
 model.ZJTX = bytes;//给专家头像变量赋值
 File.Delete(path);//删除服务器中的图片文件</p><p> }
 }
 //获取修改的其他信息,并写入数据库
 model.XM = xm;
 model.SCLYDM = sclydm;
 model.ZHWT = zhwt;
 model.ZJJS = zjjs;
 BLL.B_ZHUANJIA.UpdateZhuanJia(model,out tishi);//插入数据库中
 return tishi;
 
 }</p><p>其中有部分变量未说明,这里只做主要思路的介绍,一些无关的变量可以不用考虑。</p>

.net利用ajax技术实现图片上传并回显到界面的更多相关文章

  1. html5利用canvas实现颜色容差抠图功能

    这篇文章主要介绍了html5利用canvas实现颜色容差抠图功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. Canvas图片分割效果的实现

    这篇文章主要介绍了Canvas图片分割效果的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. HTML5 Canvas实现放大镜效果示例

    这篇文章主要介绍了HTML5 Canvas实现放大镜效果示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)

    这篇文章主要介绍了Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. html5如何在Canvas中实现自定义路径动画示例

    本篇文章主要介绍了html5如何在Canvas中实现自定义路径动画示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  6. 基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能

    这篇文章主要介绍了基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能,需要的朋友可以参考下

  7. canvas实现圆形进度条动画的示例代码

    这篇文章主要介绍了canvas实现圆形进度条动画的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  9. 教你使用Canvas处理图片的方法

    本篇文章主要介绍了教你使用Canvas处理图片的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. 手把手教你实现一个canvas智绘画板的方法

    这篇文章主要介绍了手把手教你实现一个canvas智绘画板的方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部