前端代碼:
<%@ 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();
}
}
}