2011-05-06 75 views
0

方法1上傳圖像的最有效方法(兩種方法)

這種方法是常見的一種。如果要插入一些包含文字 和圖像的數據,則可以在單擊「保存」按鈕(保存文本)之前上傳圖像。

方法2

我創建HttpPostedFile類型的數組:

static int i; 
static HttpPostedFile[] fp; 
中的.aspx

<ASP:FILEUPLOAD id="btnBrowse" runat="server" /> 
<br /> 
<ASP:BUTTON id="btnUpload" runat="server" onclick="addfile_Click"/> 
<br /> 
<ASP:BUTTON id="btnSave" runat="server" onclick="save_Click" /> 

btnUpload將下一圖像添加到陣列:

protected void addfile_Click(object sender, EventArgs e) 
{ 
    if (btnBrowse.HasFile) 
    { 
     fp[i] = btnBrowse.PostedFile; 
     i++; 
    } 
} 

btnSave將在數組中插入圖片:

protected void Save_Click(object sender, EventArgs e) 
{ 
    for (int j = 0; j <= i; j++) 
    { 
     string filename = Path.GetFileName(fp[j].FileName); 

     var image = SD.Image.FromStream(fp[j].InputStream); 

     image.Save(Server.MapPath("~/images/Profiles_Images/") + filename); 
    } 
} 

它工作正常。我有兩個問題:

  1. 第二種方法比第一種方法更有效嗎?
  2. 如果是這樣,如何保存數組中的文件而不使用靜態(不保存沒有靜態的值)?因爲你知道靜態效率不高。
+0

@HTB:我相信你關於靜態效率不高的一般性陳述是不明智的;沒有任何跡象表明,使靜態的東西會比不靜態的效率更低。這是關於任何資源會發生多少爭奪的全部。 – casperOne 2011-05-06 18:04:52

+0

我讀過很多文章,建議使用靜態是程序員之間的常見錯誤! – Roobah 2011-05-06 18:10:19

+0

@HTB:不是。它在*如何使用*這是一個錯誤。僅僅是「靜態」並不會讓它變得糟糕。 – casperOne 2011-05-06 18:15:31

回答

0

無論哪種方式都沒有問題,第二種方法可能效率更高,因爲它一次全部上傳,而不是發佈文件,然後發佈另一個文件。服務器需要花費相同的時間,但從用戶體驗來看,這將是單調乏味的。

然而,對於一個真正的好用戶體驗,以及一次上傳多個文件的功能,使用uploadify:http://www.uploadify.com/

+0

選擇第二個的原因有兩個。 1)我必須逐一上傳它們,以便用戶撰寫評論。 2)在用戶點擊保存按鈕之前,圖像不會被保存(這將保存其他輸入和圖像一起創建一個記錄) – Roobah 2011-05-06 18:15:14

0

目前還不清楚什麼是「有效的」芒你。您是否擔心beeing方便用戶(可用性?),或什麼是最快/最優的服務器(性能?)或正確性(這似乎是您在「靜態效率不高」中使用它的方式)。 ..

如果要支持多個用戶,則使用靜態將不起作用。在服務器端應用程序中靜態是非常合理的,並且幾乎從不安全地存儲用戶的服務器代碼數據。

如果您想逐個存儲文件,請考慮使用SQL會話狀態或其他持久性存儲,因爲在請求之間保存在內存中的文件可能由於進程重新啓動而丟失。

+0

是的。它適用於多個用戶。還有什麼我可以使用,而不是靜態? – Roobah 2011-05-06 20:03:42

+0

正如我所說 - 考慮會話狀態(SQL版本,如果你關心進程重啓)。一次上傳多個文件也沒有什麼特別的錯誤,只要您提供體面的用戶界面在發佈之前輸入所有必要的數據即可。 – 2011-05-06 21:12:14