二进制数据流方式实现 个人头像的读取、上传、修改------善良公社项目

原创 2013年12月03日 00:14:47

       这几天自己在实现个人资料修改信息这块,首先当用户注册后并不能来的把所有详细信息都填写完整,所有这块需要用户通过修改用户上传自己的头像,首先系统会默认加载一个头像,如图:

现在系统是默认的,我点击修改资料的时候需要查出这个图片,再把我的头像传上去,即修改即可。

 

代码很简单(自己考虑的时候一直受到思维限制,使用js来实现(绕弯了)并没有会想如此简单(建新指导))

 

前台:

 

<div title="修改头像" style="overflow: auto; padding: 20px;">
                            <%--<form id="Form2" method="post" runat="server">--%>
                            <div id="localImag"   style="width: 350px; float: left">
                                <img id="preview" src="SearchPhoto.ashx"  />
通过调用一般处理程序绑定头像
                                
                            </div>
                            <div style="width: 100px; float: left">
                                <asp:FileUpload ID="FileUpload1" runat="server" onchange="javascript:setImagePreview(this,localImag,preview);" />
                                
                            </div>

 


一般处理程序:

 

 ////绑定数据源,将信息添加到Category

                StringBuilder strWhere = new StringBuilder();
                string UserID = context.Session["ID"].ToString();
                userInfo = userinfobll.GetEntity(UserID);
                string HeadImg = userInfo.HeadImg;//获取头像地址(我用的是相对路径)
string img = context.Server.MapPath(HeadImg);//把头像地址转换为绝地地址(受下面的要求)
                
                FileStream aFile = new FileStream(img, FileMode.OpenOrCreate, FileAccess.ReadWrite); // 以二进制方式读文件 
                
                BinaryReader brMyfile = new BinaryReader(aFile); // 创建一个二进制数据流读入器,和打开的文件关联 
               
                brMyfile.BaseStream.Seek(0, SeekOrigin.Begin); // 把文件指针重新定位到文件的开始  
               
                byte[] photo = brMyfile.ReadBytes(Convert.ToInt32(aFile.Length.ToString())); //获取照片的字节数组  
               
                brMyfile.Close(); // 关闭以上new的各个对象  

                context.Response.BinaryWrite(photo);//把图片的路径返回界面


这样轻松的根据数据库中的路径加载相应的图片,修改头像就是很简单了。(部分核心代码--贺刚博客分享)

if (this.FileUpload1.FileContent.Length >= 200000)//限制大小
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('照片不能超过200KB!');</script>");
                return;
            }
            String fullfilename = this.FileUpload1.PostedFile.FileName;    //获取图片的绝对路径
            String filename = fullfilename.Substring(fullfilename.LastIndexOf("\\") + 1);//获取图片的名称
            String type = filename.Substring(filename.LastIndexOf(".") + 1).ToLower();            //获取图片的格式(类型)
            String Rename = Session["UserName"] + "_" + DateTime.Now.ToString("yyyyMMddHHmmss");     //用户名+时间命名,避免上传图片命名重复
            string varToDirectory = Request.PhysicalApplicationPath + "touxiang";  //专门存放用户相册的文件
            //判断文件是否存在,不存在则创建该文件
            if (!Directory.Exists(varToDirectory))
            {
                Directory.CreateDirectory(varToDirectory);
            }
            if (type == "jpg" || type == "png" || type == "jpeg" || type == "gif")
            {

                userInfo.UserID = Int32.Parse(Session["UserID"].ToString());
                userInfo.HeadImg = "touxiang/" + Rename + "." + type;  //数据库中中图片的路径
 FileUpload1.SaveAs(Server.MapPath("touxiang") + "/" + Rename + "." + type);//将图片以相对路径保存,并以当前时间命名


 总结

        遗留下的问题:

        1:如果直接使用一般处理程序返回的是字符串(头像的相对地址),不能正常显示图片,在浏览器的调试下把相对地址拷过去可以正常显示图片,为什么返回的是二进制流就可以读取头像,二者的区别是什么呢?请高手指导。

 

         这段时间做系统,遇到的问题越来越多,见识也越多越广,好多知识等着去深刻理解、运用,打破思维的限制,大家共同努力啊。

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

将图片以二进制格式存入数据库,并以流的方式展现在jsp页面

1.     简介 项目新需求,管理员有权限创建应用,应用字段包括:id、softname、softunique、softimage;上传图片时,数据库存储二进制,当普通用户首页展示图片时需要以流的...
  • Mr_yczhang
  • Mr_yczhang
  • 2015年05月04日 11:37
  • 3355

Xutils HttpUtils上传文件的实现

移动开发处理网络上传文件时经常使用xUtils这个库。xUtils是github上的一个Android开源工具项目,其中HttpUtils模块是处理网络连接部分...
  • zxm317122667
  • zxm317122667
  • 2015年06月04日 21:12
  • 45768

js将图片转化为二进制流

现在图片在html的img标签里面,想将图片转化为二进制流,传给native code。然后给imageview,就不用重新从网络下载了。...
  • qq469236803
  • qq469236803
  • 2013年12月11日 14:25
  • 8926

el-upload 与 FormData上传文件

最近在用el-upload做上传图片的功能,用的el-uplod中的点击上传做。但是 点击上传的时候。不会触发action中的post请求,所以就干脆在on-change函数里写入原生的FormDa...
  • cofecode
  • cofecode
  • 2017年09月25日 11:06
  • 1315

SSH+easyUI实现文件上传

step1.思路 参考文献:http://wenku.baidu.com/view/3f4ce83e580216fc700afdd7.html step 2.引包 1、commons...
  • tangzenglei
  • tangzenglei
  • 2015年09月14日 20:04
  • 4960

iOS 图片上传使用base64或者二进制流上传头像

我们在写代码的时候经常会将头像进行上传服务器,上传头像图片我试过两种方式 一种方式就是使用base64字符串上传图片,这种形式我个人认为比较适合上传图片数量比较少的,比如上传头像,上传图片数量多的话,...
  • tuwanli125
  • tuwanli125
  • 2015年12月15日 16:59
  • 7471

Android 开发 上传用户头像到服务器的数据库再获取显示

Android上传用户头像到服务器的MySql数据库,再读取并显示。
  • u014594922
  • u014594922
  • 2016年04月09日 18:40
  • 6081

iOS通过http post 文件流上传文件(头像)代码实现

由于服务器要求以文件流上传头像至服务器,之前使用的是ASIFormDataRequest,只需简单设置,就可以实现上传[request setFile:imageDirectory forKey:@"...
  • ldx117182975
  • ldx117182975
  • 2016年07月26日 10:29
  • 1891

ASP.NET简单实现APP中用户个人头像上传和裁剪

最近有个微信项目的用户个人中心模块中,客户要求用户头像不仅仅只是上传图片,还需要能对图片进行裁剪。考虑到flash在IOS和Android上的兼容性问题,于是想着能从js这块入手,在网上发现了devo...
  • Jokeny_gyh
  • Jokeny_gyh
  • 2016年08月20日 01:01
  • 2071

iOS应用上传个人头像

上传头像
  • qq_22026331
  • qq_22026331
  • 2017年02月13日 15:50
  • 96
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二进制数据流方式实现 个人头像的读取、上传、修改------善良公社项目
举报原因:
原因补充:

(最多只允许输入30个字)