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();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章