1、前台檔案 Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true"CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>asp.net fileupload控制項上傳檔案_www.jb51.net</title></head><body> <form id="form1" runat="server"><asp:FileUpload ID="FileUpload1" runat="server" /><asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /><asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="FileUpload1"ErrorMessage="必須是 jpg或者gif檔案" ValidationExpression="^(([a-zA-Z]:)|(\\{2}\W+)\$?)(\\(\W[\W].*))+(.jpg|.Jpg|.gif|.Gif)$"></asp:RegularExpressionValidator></form></body></html>
2、後端代碼 Default.aspx.cs:
using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { }protected void Button1_Click(object sender, EventArgs e) {String savePath = @"F:\111\";if (FileUpload1.HasFile){String filename;filename = FileUpload1.FileName;savePath +=filename;FileUpload1.SaveAs(savePath);Page.Response.Write(FileUpload1.PostedFile.ContentType + FileUpload1.PostedFile.ContentLength+"<br>");Page.Response.Write("<img src='"+savePath+"'>");}else{Page.Response.Write("fff");} }}
去掉綠色部分就可上傳任何檔案,它是用一個Regex來驗證上傳檔案的類型
在ASP.NET 2.0中使用FileUpload伺服器控制項很容易的就能將檔案上傳到伺服器。
1、aspx檔案代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="fileupload.aspx.cs" Inherits="fileupload" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>FileUpload上傳檔案樣本-jb51.net</title></head><body> <form id="form1" runat="server"> <div><asp:FileUpload ID="FileUpload1" runat="server" /><asp:Button ID="Button1" runat="server" _disibledevent="Button1_Click" Text="上傳檔案" /><br /><asp:Label ID="Label1" runat="server" Height="269px" Text="Label" Width="360px"></asp:Label></div> </form></body></html>
2、後端代碼 aspx.cs:
protected void Button1_Click(object sender, EventArgs e){ if (FileUpload1.HasFile) {try{FileUpload1.SaveAs(Server.MapPath("upload") + "\\" + FileUpload1.FileName);Label1.Text = "用戶端路徑:" + FileUpload1.PostedFile.FileName + "<br>" +"檔案名稱:" + System.IO.Path.GetFileName(FileUpload1.FileName) + "<br>" +"副檔名:" + System.IO.Path.GetExtension(FileUpload1.FileName) + "<br>" +"檔案大小:" + FileUpload1.PostedFile.ContentLength + " KB<br>" +"檔案MIME類型:" + FileUpload1.PostedFile.ContentType + "<br>" +"儲存路徑:" + Server.MapPath("upload") + "\\" + FileUpload1.FileName;}catch (Exception ex){Label1.Text = "發生錯誤:" + ex.Message.ToString();} } else {Label1.Text = "沒有選擇要上傳的檔案!"; }}
1、asp.net fileupload多檔案上傳的例子
使用fileupload實現多檔案上傳,可以像傳單個檔案那樣對每個檔案單獨進行處理,除此之外,還可以使用HttpFileCollection類捕獲從Request對象發送來的所有檔案,然後再單獨對每個檔案進行處理。
後端代碼 aspx.cs:
protected void Button1_Click(object sender, EventArgs e){ string filepath = Server.MapPath("upload") + "\\"; HttpFileCollection uploadFiles = Request.Files; for (int i = 0; i < uploadFiles.Count; i++) {HttpPostedFile postedFile = uploadFiles[i];try{if (postedFile.ContentLength > 0){ Label1.Text += "檔案 #" + (i + 1) + ":" + System.IO.Path.GetFileName(postedFile.FileName) + "<br/>"; postedFile.SaveAs(filepath + System.IO.Path.GetFileName(postedFile.FileName));}}catch (Exception Ex){Label1.Text += "發生錯誤: " + Ex.Message;} }}
2、上傳檔案類型的驗證
對上傳檔案類型的驗證既可以在用戶端進行,也可以在伺服器端進行。
用戶端可以使用驗證控制項來進行,這裡重點介紹如何在伺服器端進行驗證。
以上cs檔案中已用GetExtension擷取了檔案的副檔名,只要稍加判斷即可實現上傳類型驗證:
aspx.cs:
protected void Button1_Click(object sender, EventArgs e){ if (FileUpload1.HasFile) {fileExt = System.IO.Path.GetExtension(FileUpload1.FileName);if (fileExt == ".rar" || fileExt == ".zip"){try{ FileUpload1.SaveAs(Server.MapPath("upload") + "\\" + FileUpload1.FileName); Label1.Text = "用戶端路徑:" + FileUpload1.PostedFile.FileName + "<br>" +"檔案名稱:" + System.IO.Path.GetFileName(FileUpload1.FileName) + "<br>" +"副檔名:" + System.IO.Path.GetExtension(FileUpload1.FileName) + "<br>" +"檔案大小:" + FileUpload1.PostedFile.ContentLength + " KB<br>" +"檔案MIME類型:" + FileUpload1.PostedFile.ContentType + "<br>" +"儲存路徑:" + Server.MapPath("upload") + "\\" + FileUpload1.FileName;}catch (Exception ex){ Label1.Text = "發生錯誤:" + ex.Message.ToString();}}else{Label1.Text = "只允許上傳rar、zip檔案!";} } else {Label1.Text = "沒有選擇要上傳的檔案!"; }}
注意,不能過分依賴於用戶端驗證控制項和伺服器端上述方法的驗證,因為使用者只需將副檔名更改為允許的類型就可以避開上邊的驗證,這對使用者來說並不是件困難的事情。
3、解決檔案大小限制
在ASP.NET 2.0中FileUpload預設上傳檔案最大為4M,不過可以在web.cofig中修改相關節點來更改這個預設值,相關節點如下:
<system.web> <httpRuntime maxRequestLength="40690" executionTimeout="6000" /></system.web>
maxRequestLength表示可上傳檔案的最大值,executionTimeout表示ASP.NET關閉前允許發生的上傳秒數。
4、"multipart/form-data"和Request共存
在ASP程式中一旦使用表單上傳檔案(form的enctype屬性值為multipart/form-data),伺服器端就不能再用Request.Form來擷取表單的值,這種限制在ASP.NET 2.0中已不存在了:
aspx.cs:
protected void Button1_Click(object sender, EventArgs e){ if (FileUpload1.HasFile) {try{FileUpload1.SaveAs(Server.MapPath("upload") + "\\" + FileUpload1.FileName);Label1.Text = "上傳檔案:" + FileUpload1.FileName + "<br>" +"說明:" + Request.Form["TextBox1"];//也可以用"TextBox1.Text"來擷取說明}catch (Exception ex){Label1.Text = "發生錯誤:" + ex.Message.ToString();} } else {Label1.Text = "沒有選擇要上傳的檔案!"; }}