• 文件上传


    一、单文件上传

    控件:
    FileUpload - 控件,界面+方法+属性
    Button/LinkButton/ImageButton

    FileUpload控件:
    1.SaveAs("要上传到服务器的绝对路径") 方法:上传文件。
    般需要使用Server.MapPath()进行相对路径与绝对路径之间的转换。

        protected void Button1_Click(object sender, EventArgs e)
        {
            string path = Server.MapPath("Upload/aaa.txt");//需要路径映射
            FileUpload1.SaveAs(path);
        }

    2.FileName属性:要上传文件的纯文件名,不带路径。

    问题:所有上传文件都叫aaa.txt。如何保持文件原有的名子?

    优化一:使用FileUpload的FileName属性,获取出上传文件的客户端的名子。

        protected void Button1_Click(object sender, EventArgs e)
        {
            string filename = FileUpload1.FileName; //取得文件上传之前在客户端的名字
            string path = Server.MapPath("Upload/"+ filename);
            FileUpload1.SaveAs(path);
        }

    优化二:不同用户,在同一时间传相同的文件名,在文件名中使用用户名加以区分:

    //新建一个登录界面
       protected void Button1_Click(object sender, EventArgs e)
        {
            //若用户登陆成功,跳转到上传界面
            if (true)
            {
                Session["user"] = TextBox1.Text;
                Response.Redirect("Default.aspx");
            }
    
        }
    //再上传界面判断
     protected void Page_Load(object sender, EventArgs e)
        {
            //判断登陆用户是不是为空,如果为空跳转到登录界面
            if (Session["user"] == null)
            {
                Response.Redirect("Index.aspx");
            }
        }
    //上传
      protected void Button1_Click(object sender, EventArgs e)
        {
            string filename = DateTime.Now.ToString ("yyyyMMddhhmmss")+ Session["user"].ToString ()+  FileUpload1.FileName; 
            string path = Server.MapPath("Upload/"+ filename);
            FileUpload1.SaveAs(path);
        }

    优化三:扩容

    在Web.Config中配置上传请求的最大长度

        <system.web>
            <httpRuntime maxRequestLength="40960"/>
        </system.web>

    二、 多文件上传到服务器硬盘:

     思路:遍历页面Form中的每个控件,判断是否是FileUpload,如果是的话就把它强制转化为FileUpload类型,再按单文件上传逐个上传即可

        protected void Button1_Click(object sender, EventArgs e)
        {
            //定义一个流水号
            int i = 1;
            //遍历form中的每个控件
            foreach (Control ctrl in this.form1.Controls )
            {
                //ctrl对象是不是FileUpload类型
                if (ctrl is FileUpload) //判断每个控件中是否选择了上传的文件
                {
                    //强制转换为FileUpload类型
                    FileUpload file = (FileUpload)ctrl;
                    if (file.HasFile)
                    {
                        //取出文件名
                        string filename = DateTime.Now.ToString("yyyyMMddhhmmss") + i.ToString("0000") + file.FileName;
                        string path = Server.MapPath("Upload/" + filename);
                        file.SaveAs(path);
                        i++;
                    }
                }
            }
        }

    三、上传文件到数据库的Image字段:

        protected void Button1_Click(object sender, EventArgs e)
        {
            //把界面的数据取出来
            string filename = FileUpload1.FileName;//取文件名
            byte[] content = FileUpload1.FileBytes;//把上传文件的数据取出来
            //送到数据库中去
            Photo data = new Photo();//建一个新对象
            data.FileName = filename; //上传上来的文件名
            data.Content = content; //接收上传文件的数据
    
            _Context.Photo.InsertOnSubmit(data);
            _Context.SubmitChanges();
        }

    四、从数据库中的Image字段中取出来,显示在页面上

    1.选做一个显示图片的页面。例如:ShowPic.aspx.
    这个页面根据传来的主键值,查询出图片数据,并Response.OutputStream显示在界面。

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request["id"] != null)
            {
                string Index = Request["id"].ToString();
    
                //读取一条Photo表的数据
                var query = _Context.Photo.Where(p => p.Ids.ToString() == Index);
                Photo data = query.First();
                byte[] pic = data.Content.ToArray();
    
                //把二进制数据输出到界面上
                Response.OutputStream.Write(pic, 0, pic.Length);//向输出流里输出二进制数据
                Response.End();
            }
        }

    2.在另一个界面上,放一个Image控件,让该Image控件的ImageUrl指向上面的那个页面,并传指定的值过去。

    public partial class Default3 : System.Web.UI.Page
    {
        private MyDBMDataContext _Context = new MyDBMDataContext();
        //绑定数据
        private void FillPic()
        {
            List<Photo> list = _Context.Photo.ToList();
            DropDownList1.DataSource = list;
            DropDownList1.DataTextField = "FileName";
            DropDownList1.DataValueField = "Ids";
            DropDownList1.DataBind();
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                FillPic();
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            Image1.ImageUrl = "ShowPic.aspx?id=" + DropDownList1.SelectedValue;
        }
    }
  • 相关阅读:
    Machine Learning Basic Knowledge
    What is the reason that a likelihood function is not a pdf?
    MySql 增加字段 删除字段 修改字段名称 修改字段类型
    Manual install on Windows 7 with Apache and MySQL
    linux 解压命令大全[转]
    MVC2项目实践
    JSP显示新闻
    servlet应用
    login登录页面
    java web基础
  • 原文地址:https://www.cnblogs.com/qianxiaojinnian/p/4732037.html
Copyright © 2020-2023  润新知