FileUpload 上傳多筆資料 Part2

摘要:上傳多筆資料 Part2

目前有一個案子需要多方面上傳圖片還有一次顯示兩個圖片,目前先筆記一下等周休二日在整個畫面顯示給大家看。
當然程式方面,有寫不好的地方請大家多多包涵。不過在這邊先感謝 Allen kuo 的教導。
目前要注意的地方就是寫入資料庫的時候,INSERT   INTO 遊玩記錄(日期,紀錄人,記事,照片,照片2,遊玩記錄) VALUES(@日期,@記錄人,@記事,@照片,@遊玩記錄,@照片2),請記得不要跟SQL一樣打個 '照片'以免發生錯誤,今天就發生搞笑事件。

那目前以畫面來說明功能目前我做寫的案子功能

以上的畫面重點在於要放兩張圖片,但是光這點就讓我想了很久很久很久,不過很開心還是寫出來,只是希望看到程式碼能夠給我一些建議謝謝。

目前功能是可以放一張圖片和兩張圖片。

那以下是我所寫的程式碼,有甚麼修改的,希望能夠給我一點意見。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data.SqlClient;
using System.Data;
using System.Web.Configuration;

public partial class _Default : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
    }
    int i = 1;
    bool FileOk = false ;
    string FileName = "";
    string Saves= "";
    protected void Button1_Click2(object sender, EventArgs e)
    {
        foreach (string Key in Request.Files.Keys)/*抓取FileUpload1控制項*/
        {
            HttpPostedFile File = Request.Files[Key];/*讀取FileUpload1的檔名*/
            Save(File);/*傳送給Save*/
            if (Saves.ToString() != "")/*假如存檔後是空的話不要顯示圖片*/
            {
                switch (i)/*目前只想到這個方法用switch來判定*/
                {
                    case 1:
                Image1.ImageUrl = @"~/WebSite1/image/" + FileImage;
              
                break;
                    case 2:
                Image2.ImageUrl = @"~/WebSite1/image/" + FileImage2;
              
                break;
                
                }
                i += 1;
        }
        }
 
    }
  
    int count = 0;
    private string Save(HttpPostedFile File)
    {

        if (File.ContentLength == 0) return Saves = "" ;/*如果沒有檔案回傳空值*/
        string GetExtension=Path.GetExtension(File.FileName).ToString();/*抓取副檔名*/
        FileName = Guid.NewGuid().ToString("N") + GetExtension.ToString();/*以亂數存檔*/
 
    
          Saves = Server.MapPath(@"~/WebSite1/image/") + FileName;/*把路徑和檔名給save*/
        string[] AllGetExtension = { ".jpg", ".gif", ".jpeg", ".bmp" };/*判斷是否是圖片檔*/
        /*做迴圈動作*/
        for (int i = 0; i < GetExtension.Length; i++)
        {
            if (GetExtension == AllGetExtension[i])
            {
                FileOk = true;
                break;
            }
        }
        /*判定是的話就存入如果不是就別存了然後java呼叫*/
            if (FileOk)
            {
                File.SaveAs(Saves);
    
            }
            else
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Click", "alert('請選擇副檔名為{.jpg .bmp .gif.jpge.png}格式')", true);
                Saves = "";
            }
        /*因為兩個圖片所以只好用笨方法來判定*/
            if (count <= 0)
            {


                FileImage = FileName;
                Image1.Visible = true;
            }
            else
            {

                FileImage2 = FileName;
                Image2.Visible = true;
            }
            count += 1;
        return FileName;
    
    }
    private string FileImage2/*第二張圖用ViewState來判定是否有存值*/
    {
        get
        {
            if (ViewState["FileName2"] == null)
            {
                return "";
            }
            return (string)ViewState["FileName2"];
        }
        set
        {
            ViewState["FileName2"] = value;
        }
    }
    private string FileImage/*第一張圖用ViewState來判定是否有存值*/
    {
        get
        {
            if (ViewState["FileName"] == null)
            {
                return "";
            }
            return (string)ViewState["FileName"];
        }
        set
        {
            ViewState["FileName"] = value;
        }
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        string error = string.Empty;
        if (string.IsNullOrEmpty(TextBox1.Text))
        {
            error += "日期記得要填寫\\r\\n";
        }
        if (string.IsNullOrEmpty(TextBox2.Text))
        {
            error += "記錄人姓名要填寫\\r\\n";
        }
        if (string.IsNullOrEmpty(TextBox3.Text))
        {
            error += "記事要填寫\\r\\n";
        }
        if (string.IsNullOrEmpty(TextBox5.Text))
        {
            error += "遊玩記錄要填寫\\r\\n";
        }
        if (string.IsNullOrEmpty(error))
        {
            using (SqlConnection Conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
            {
                Conn.Open();
                string SqlStr = "INSERT   INTO 遊玩記錄(日期,紀錄人,記事,照片,照片2,遊玩記錄) VALUES(@日期,@記錄人,@記事,@照片,@遊玩記錄,@照片2)";
                SqlCommand Command = new SqlCommand(SqlStr, Conn);
                Command.Parameters.Add("@日期", SqlDbType.NVarChar, 40).Value = TextBox1.Text;
                Command.Parameters.Add("@記錄人", SqlDbType.NVarChar, 40).Value = TextBox2.Text;
                Command.Parameters.Add("@記事", SqlDbType.NVarChar, 40).Value = TextBox3.Text;
                Command.Parameters.Add("@遊玩記錄", SqlDbType.NVarChar, 40).Value = TextBox5.Text;
                Command.Parameters.Add("@照片", SqlDbType.NVarChar, 40).Value = Image1.ImageUrl.ToString();
                Command.Parameters.Add("@照片2", SqlDbType.NVarChar, 40).Value = Image2.ImageUrl.ToString();

                Command.ExecuteNonQuery();
            }
        }
        else
        {
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Click", "alert('" + error + "')", true);
        }

    }
}

雖然功能目前看來有點瑕疵,但是我第一次在接案子的公司裡面工作~每天都感覺到學了好多東西。主管不管甚麼問題都願意交導我~真的很謝謝你,我希望持續的待下去。
快要一個月了 加油!

原本更多判斷 我問主管說這樣寫可以嗎?他跟我說你目前只需要能動就好,未來在慢慢研究如何寫好。
看到Allen kuo的寫法讓我少掉很多判斷,我想這樣對效能來說應該會提升不少吧

 

ViewState說明