博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用一般处理程序处理头像的浏览和更新
阅读量:5259 次
发布时间:2019-06-14

本文共 6268 字,大约阅读时间需要 20 分钟。

环境: Vs2012 SQLServer

思路:SQLServer来处理图片文件名,更新和浏览都是通过更换文件名

 

头像显示

    HTML

   

   

    这里如以往不尽相同的是,src里面书写的是一般处理程序的名称。

   一般处理程序

  

  

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Text;using BLL;using System.Web.SessionState;//引入读写操作using System.IO;namespace GoodCommunitySystem{    ///     /// SearchCompanyPhoto 的摘要说明    ///     public class SearchCompanyPhoto : IHttpHandler, IReadOnlySessionState     {        public void ProcessRequest(HttpContext context)        {            //当session有值的时候才能够上传头像            if (context.Session["UserName"] != null){                companyBLL companybll = new companyBLL();                Entity.companyEntity encompanyInfo = new Entity.companyEntity();                           StringBuilder strWhere = new StringBuilder();                //拿到session中存在的用户id值                string userID = context.Session["UserID"].ToString();                 string userName=context.Session["UserName"].ToString();                encompanyInfo = companybll.GetEntity(userID);                //获取头像地址                string HeadImg = encompanyInfo.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()));                // 关闭以上new的各个对象                  brMyfile.Close();                context.Response.BinaryWrite(photo);            }            else            {                return;            }        }        public bool IsReusable        {            get            {                return false;            }        }    }}
  
 这里需要注意的就是引入了文件的IO操作,还就是在类后面继承这个类IReadOnlySessionState。用来处理session对象。还有一个就是二进制流文件的处理,这里采用的是将文件名转换为二进制文件。这样才能后显示在界面上,有些诡异。但是仔细一想,如果这个是在unix上浏览的网页。而unix定义变量的大小都不一样,肯定是无法读取到这个你再windows定义的文件名的。所以二进制就能够很好的解决问题。

头像浏览和上传

 

    HTML

   

     JS

   

function SavePhoto() {            document.getElementById("test").value = "SavePhoto";//设定表示为后台调不同方法数据            var form = document.forms["TabData"];            form.action = "EditCompanyInfo.aspx";            form.method = "POST";            form.submit();        }

   后端代码

   

using BLL;using Entity;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace GoodCommunitySystem{    public partial class EditCompanyInfomation : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            var test = Request.Form["test"];            //当session中不存在值,页面重定向到首页            if (Session["UserName"] == null)            {                Response.Redirect("default.aspx");            }            else            {                                if (test == "SavePhoto")                {                        //上传头像                        UpdatePhoto();                }                            }        }        companyBLL companybll = new companyBLL();        companyEntity encompany = new companyEntity();        public void UpdatePhoto()        {            if (Session["UserName"] == null)            {                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "");                //Response.Write("");                return;            }            if (this.FileUpload1.FileContent.Length <= 0)            {                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "");                return;            }            if (this.FileUpload1.FileContent.Length >= 200000)            {                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "");                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")            {                companyEntity enCompanyInfo = new companyEntity();                enCompanyInfo.UserID = Session["UserID"].ToString();                enCompanyInfo.HeadImg = "touxiang/" + Rename + "." + type;  //数据库中中图片的路径                //图片首先上传至目录下                FileUpload1.SaveAs(Server.MapPath("touxiang") + "/" + Rename + "." + type);//将图片以相对路径保存,并以当前时间命名                //添加记录成功后                if (companybll.UpdateHeadImg(enCompanyInfo))                {                    Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "");                    DataListBind();                }                else                {                    //Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "");                    return;                    //Response.Write("");                }            }            else            {                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "");                //Response.Write("");            }        }        ///         /// 绑定数据        ///         public void DataListBind()        {            string UserID = Session["UserID"].ToString();            encompany = companybll.GetEntity(UserID);        }    }}
  
由于服务器的大小,这里涉及一些上传图片大小的限制,也是很好的。

总结

以上就是有关头像上传的内容了,其实大家可以看到。对于问题的解决思路,十分简单。但是在涉及到一些具体的细节内容时,可能就需要一些其他方面的知识。包括绝对地址,二进制流方式的处理。但也是一步步来的,删繁就简。

转载于:https://www.cnblogs.com/guziming/p/4232702.html

你可能感兴趣的文章
UML学习-状态图
查看>>
第四届 Rescue The Princess
查看>>
网络操作系统第三章习题
查看>>
jquery datepicker 只显示年月
查看>>
MVC学习系列——Model验证扩展
查看>>
C# GC 垃圾回收机制
查看>>
Displaying SharePoint Lists or Libraries in other sites 显示其他站点的List
查看>>
iOS9新特性之泛型
查看>>
JavaScript定时器越走越快的问题
查看>>
11--Python 备份文件程序
查看>>
python的xml模块
查看>>
Java HashMap的工作原理(转载)
查看>>
2016 Multi-University Training Contest 1
查看>>
Alpha阶段展示报告
查看>>
leetCode 加一 问题记录
查看>>
[深入理解Java虚拟机]<自动内存管理>
查看>>
图片处理的一些函数
查看>>
第十七章 Django框架——缓存机制
查看>>
swust oj 956
查看>>
JSON.stringify
查看>>