摘要:上傳多筆資料 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的寫法讓我少掉很多判斷,我想這樣對效能來說應該會提升不少吧