2013年7月19日 星期五

ASP.NET 圖片管理員(多重上傳)

在很多上傳圖片之類的例子中,通常想到的都是用FileUpload上傳檔案。
上傳的檔案就在資料夾內,如果在之後沒有再用到的話怎麼辦?
所以我就做出了這樣的程式能夠為自己的圖片做簡單的新增與刪除。


這裡是主頁(接收圖片資料)的程式碼 protected void Page_Load(object sender, EventArgs e)
{
     if (Session["Img"] != null)
     {
        lblGetName.Text = "發現圖檔已傳送," + Session["Img"].ToString();
     }
}

這裡是圖片管理員的程式碼

protected void Page_Load(object sender, EventArgs e)
{
      // 這裡是讀取圖片資料夾,並取出資料
      // 資料夾資料
      DirectoryInfo dir = new DirectoryInfo(Server.MapPath ("Image"));
      // 檔案資料 (取出自資料夾)
      FileInfo[] file = dir.GetFiles();
      // 計算ID 流水號
      int ID = 0;

      foreach (FileInfo result in file) 
      {
            ID++;
            // 創出 CheckBox,並設定相關的數值
            CheckBox img = new CheckBox();
            img.ID = "Img" + ID;
            img.Text = "<img src='Image\\" + result.Name + "' width='100' height='100' />";
            img.InputAttributes["value"] = result.Name;
            // 加入到 PlaceHolder 內
            PlaceHolderImage.Controls.Add(img);
      }
}

protected void btnNew_Click(object sender, EventArgs e)
{
       // 取得檔案路徑
       string saveDir = "\\Image\\";
       string fileName, savePath;

        // 取得檔案名稱並儲存檔案
        // 這裡是.NET 4.5的多重檔案上傳(PostedFiles)
        foreach (HttpPostedFile postedFile in FuImage.PostedFiles)
       {
             fileName = postedFile.FileName;

             savePath = Server.MapPath(saveDir + fileName);
             postedFile.SaveAs(savePath);

        }
        Response.Write("<script language='javascript'>alert('上傳成功');location.href='ImageManager.aspx';</script>");
         
}

protected void btnUse_Click(object sender, EventArgs e)
{
        // 取出選取檔案的名稱
        string useimage = "";
        for (int chk = 1; chk <= PlaceHolderImage.Controls.Count; chk++)
       {
            // PlaceHolder內的Checkbox
            CheckBox chkimg = (CheckBox)PlaceHolderImage.FindControl("Img" + chk);
            // 確認是否選取
            if (chkimg.Checked)
            {
                 useimage += Request.Form["Img" + chk]+",";
            }
        }
            // 使用 Session 紀錄資料
            Session["Img"] = useimage;
            Response.Redirect("Default.aspx");
        }

protected void btnDel_Click(object sender, EventArgs e)
{
        // 刪除圖片
        bool notexist = false;
        DirectoryInfo dir = new DirectoryInfo(Server.MapPath("Image"));
        FileInfo[] file = dir.GetFiles();
        int ID = 0;
          foreach (FileInfo delfile in file)
          {
                ID ++ ;
                CheckBox chk = (CheckBox)PlaceHolderImage.FindControl("Img" + ID);
              if (chk.Checked)
              {
                  //確認檔案存在
                  if (delfile.Exists)
                  {
                      delfile.Delete();
                  }
                  else
                  {
                      notexist = true;
                  }
              }
          }

          if (notexist == true)
          {
              Response.Write("<script language='javascript'>alert('刪除失敗,圖檔不存在')</script>");
          }
          else
          {
              Response.Write("<script language='javascript'>alert('刪除成功');location.href='ImageManager.aspx';</script>");
          }
}


參考資料
FileUpload控制項「批次上傳 / 多檔案同時上傳」的範例 -- AllowMuliple屬性
[ASP.NET] 替CheckBox增加Value值

範例下載
點我

沒有留言:

張貼留言