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