ASP.NET有关于文件上传、下载、全选、删除选中重要干货(亲测有效)

前端代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PhotoManager.aspx.cs" Inherits="WebApplication2.PhotoManager" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">
        table{
            border:1px solid blue;
            border-collapse:collapse;
        }
        td{
             border:1px solid blue;
             padding:10px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h1>这是我的图片网站:</h1>
        <asp:FileUpload ID="upLoad" runat="server" />
        <asp:Button ID="loadBtn" runat="server" Text="上传图片" OnClick="loadBtn_Click" /><br />
        <%-- 当做复选框按钮的时候,一定要设置AutoPostBack="True"表示自动提交到服务器,服务器在回馈到页面 --%>
        <asp:CheckBox ID="chBox" runat="server" Text="全选" AutoPostBack="True" OnCheckedChanged="chBox_CheckedChanged" />
        <asp:Button ID="deleteAll" runat="server" Text="选中删除" OnClick="deleteAll_Click" />
        <asp:Table ID="tab" runat="server"></asp:Table>
    </div>
    </form>
</body>
</html>

后端代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

namespace WebApplication2
{
    public partial class PhotoManager : System.Web.UI.Page
    {
        List<CheckBox> list = new List<CheckBox>();

        protected void Page_Load(object sender, EventArgs e)
        {
            

            //画页面
            DrawPage();

            this.deleteAll.Attributes.Add("onclick", "return confirm('您确定删除吗?');");
        }

        private void DrawPage()
        {
            

            //如果再一次进行重画操作的时候,就清空上一次页面所画的数据
            this.tab.Rows.Clear();

            string path = MapPath("/photos"); // /photos属于相对路径     MapPath将相对路径转成为绝对路径
            DirectoryInfo dti = new DirectoryInfo(path);   //获取目录
            FileInfo[] fis = dti.GetFiles("*.*"); //在文件夹中获取文件集合
            int count = fis.Length;     //文件的个数
            int rowCount = (count + 1) / 2; //取整数   //计算出需要的表格的行数 
            for (int i = 0; i < rowCount; i++)
            {
                TableRow row = new TableRow(); //生成行
                this.tab.Rows.Add(row);       //将生成的行,添加到表格里去
                for (int j = 0; j < 2; j++)
                {
                    TableCell cell = new TableCell(); //生成某行的列,相当于单元格
                    row.Cells.Add(cell);     //将生成的单元格,放入行中
                }
            }

            //把图片加入到表格中
            for (int i = 0; i < count; i++)
            {
                FileInfo file = fis[i];  //获取单个文件
                int rowIndex = i / 2;  //获取该图片存的行号
                int cellIndex = i % 2;   //获取该图片存的列号
                TableCell cell = this.tab.Rows[rowIndex].Cells[cellIndex]; //把图片的行号和列号添加进表格中

                Image img = new Image();   //生成一个图片,是一个对象
                img.ImageUrl = string.Format("/photos/{0}", file.Name);   //获取图片的路径
                img.Width = Unit.Pixel(100);     //图片的宽为100px
                img.Height = Unit.Pixel(120);     //图片的高为100px

                //添加下载按钮
                Button btnDownLoad = new Button();
                //给按钮添加ID号
                btnDownLoad.ID = string.Format("btnDownLoad{0}", i);
                //给按钮添加文字
                btnDownLoad.Text = "下载";
                //给按钮添加上传的文件名
                btnDownLoad.CommandArgument = file.Name;
                //注册事件
                btnDownLoad.Click += new EventHandler(btnDownLoad_Click);

                //添加删除按钮
                Button btnDelete = new Button();
                //给按钮添加ID号
                btnDelete.ID = string.Format("btnDelete{0}", i);
                //给按钮添加文字
                btnDelete.Text = "删除";
                //给按钮添加删除的文件名
                btnDelete.CommandArgument = file.Name;
                //注册事件
                btnDelete.Click += new EventHandler(btnDelete_Click);
                //点击删除按钮时给出提示
                btnDelete.Attributes.Add("onclick", "return confirm('您确认删除吗?');");

                //添加复选框按钮
                CheckBox checkBox = new CheckBox();
                checkBox.ID = string.Format("checkBox{0}", i);
                checkBox.Text = file.Name;
                list.Add(checkBox);

                Literal br = new Literal();  //这是一个通用对象,用于.NET中没有控件
                br.Text = "<br/>";

                Literal br1 = new Literal();  //这是一个通用对象,用于.NET中没有控件
                br1.Text = "<br/>";


                cell.Controls.Add(img); //把图片添加进表格中
                cell.Controls.Add(br);
                cell.Controls.Add(btnDownLoad);
                cell.Controls.Add(btnDelete);
                cell.Controls.Add(br1);
                cell.Controls.Add(checkBox);
            }
        }

        protected void btnDelete_Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            string path = this.MapPath("/photos");
            string fileName = btn.CommandArgument;
            string fullFileName = string.Format("{0}/{1}", path, fileName);
            File.Delete(fullFileName);
            this.DrawPage();
        }


        /// <summary>
        /// 点击下载按钮进行下载
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnDownLoad_Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            string path = this.MapPath("/photos");
            //获取上传文件的名字
            string fileName = btn.CommandArgument;
            string fullName = Path.Combine(path,fileName);
            HttpResponse respon = this.Response;//文件传输流
            respon.ContentType = "application/octet-stream";//设置响应流的类型
            string headerValue = string.Format("attachment;filename={0}", fileName);
            respon.AddHeader("Content-Disposition", headerValue);//设置响应流的响应头
            respon.Flush();//响应流及时提交
            respon.TransmitFile(fullName);
            respon.End();
        }

        /// <summary>
        /// 点击上传图片按钮后进行上传图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void loadBtn_Click(object sender, EventArgs e)
        {
            string fullFileName = this.upLoad.PostedFile.FileName;  //获取上传文件控件中的文件名(含路径),有时为相对路径,有时为绝对路径
            string fileName = fullFileName.Substring(fullFileName.LastIndexOf("/") + 1);//获取上传文件的文件名
            string type = fileName.Substring(fileName.LastIndexOf(".")+1); //获取文件的类型
            if (type == "png" || type == "jpg")
            {
                //如果上传文件的类型为png或者是jpg类型的就进行上传
                this.upLoad.SaveAs(string.Format("{0}/{1}", this.MapPath("/photos"), fileName));
            }
            else
            {
                Response.Write("<script language='javascript'>alert('您输入的文件格式不对,请重新输入')</script>");
            }
            //上传文件成功后要进行重画操作
            this.DrawPage();
        }

        protected void chBox_CheckedChanged(object sender, EventArgs e)
        {
            if (this.chBox.Checked)
            {
                foreach (CheckBox chx in this.list)
                {
                    chx.Checked = true;
                }
            }
            else
            {
                foreach (CheckBox chx in this.list)
                {
                    chx.Checked = false;
                }
            }
        }

        protected void deleteAll_Click(object sender, EventArgs e)
        {
            foreach (CheckBox cbx in this.list)
            {
                if (cbx.Checked)
                {
                    string fileName = cbx.Text;
                    string path = this.MapPath("/photos");
                    string fullPath = string.Format("{0}/{1}", path, fileName);
                    File.Delete(fullPath);
                }
            }
            this.DrawPage();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/jianjianshini/article/details/106064728