Ch11 檔案上傳及電子郵件 WEB程式設計
<html> <head> <script runat="server"> Sub Page_Load(ByVal sender as Object, ByVal e As EventArgs) Dim i As Integer For i=1 to 30 DateList.Items.Add(i) Next End Sub </script> </head> <body> <form runat="server"> 日期: <asp:DropDownList runat="server" ID=“DateList"/> </form> </body> </html>
HtmlInputFile檔案控制項-語法 ASP.NET的Web表單可以使用HTML控制項的HtmlInputFile檔案控制項檢視客戶端的檔案清單,然後在客戶端選擇上傳的檔案,其基本語法如下所示: <input type="FILE" id="field_name" size="number" accept="image/*" runat="Server"/> 標籤也是Input欄位,只是type屬性為FILE,這個標籤可以顯示一個欄位和一個按鈕以選取檔案。
HtmlInputFile檔案控制項-使用 使用HtmlInputFile控制項的目的是上傳檔案,Web表單<form>標籤需要使用enctype屬性指定編碼方式,如下所示: <form enctype="multipart/form-data" runat="Server"> ………….. </form> enctype屬性指定的是上傳檔案的編碼方式,如下所示: enctype="multipart/form-data" 屬性值可以將選擇檔案內容上傳到Web伺服器。
上傳單一檔案-匯入名稱空間 上傳檔案需要使用到System.IO名稱空間的HttpPostedFile類別,所以在ASP.NET程式的開頭需要匯入此名稱空間,如下所示: <%@ Import Namespace="System.IO" %> 只需在Web表單的HtmlInputFile控制項選好上傳檔案,上傳的檔案資料就會隨著網頁送回伺服端。
上傳單一檔案-使用 在伺服端使用此控制項的PostedFile屬性取得HttpPostedFile物件,如下所示: Dim file As HttpPostedFile = filename.PostedFile 程式碼取得HtmlInputFile控制項屬性PostedFile的HttpPostedFile物件,然後使用SaveAs()方法將檔案資料寫成伺服端的檔案,如下所示: file.SaveAs(up_path & "/" & _ Path.GetFileName(file.FileName)) FileName屬性可以取得上傳檔案的名稱,ContentLength屬性取得上傳檔案的長度,Path類別的GetFileName()方法可以取得路徑中的檔案名稱。
範例1:上傳檔案 <%@ Page Language="VB" Debug="True" %> <%@ Import Namespace="system.IO" %> <script Runat="server"> Sub UpLoadFile(S As Object, e As EventArgs) Dim uploadPath As String =Server. MapPath("Ch11") Dim file As HttpPostedFile = filename.PostedFile If file.ContentLength = Nothing Then msg.Text = "請選擇上傳的檔案" Else file.SaveAs(uploadPath & "/" & Path.GetFileName(file.FileName)) msg.Text = "檔案上傳成功" End If End Sub </script> <html> <head> <title>上傳檔案</title> </head> <body> <form enctype="multipart/form-data" runat="server"> <input type="FILE" Id="filename" size="40" runat="server"/><br/> <asp:Button OnClick="UploadFile" Text="上傳檔案" runat="server"/><br/> <asp:Label id="msg" runat="server" /> </form> </body> </html>
同時上傳多個檔案-取得集合物件 如果Web表單擁有多個HtmlInputFile控制項,我們就可以同時上傳多個檔案,在選擇好多個上傳檔案後,伺服端可以取得這些檔案的集合物件,如下所示: Dim objFileCollection As HttpFileCollection = _ Request.Files 程式碼使用Request物件的Files屬性取得上傳檔案的HttpFileCollection物件,這是HttpPostedFile集合物件。
同時上傳多個檔案-儲存上傳檔案 在取得上傳檔案的集合物件後,使用For Next迴圈取得每一個HttpPostedFIle物件,如下所示: For i = 0 To objFileCollection.Count - 1 file = objFileCollection(i) If file.ContentLength <> Nothing Then file.SaveAs(up_path & "/" & _ Path.GetFileName(file.FileName)) End If Next i 程式碼的Count屬性可以取得物件數,在取得每一個HttpPostedFile物件後,使用SaveAs()方法儲存上傳的檔案。
Web表單的電子郵件寄送-匯入名稱空間 在ASP.NET程式處理電子郵件,寄送郵件是使用System.Web.Mail名稱空間的MailMessage和SmtpMail類別,在程式的開頭需要匯入此名稱空間,如下所示: <% @Import Namespace="System.Web.Mail" %> 在匯入名稱空間後,即可使用MailMessage類別建立電子郵件,然後使用SmtpMail類別寄送郵件。
Web表單的電子郵件寄送-MailMessage類別 Dim mail As MailMessage = New MailMessage() 程式碼使用New運算子建立名為mail的MailMessage物件,接著就可以設定物件的相關屬性來建立郵件內容。
Web表單的電子郵件寄送-MailMessage類別的屬性
Web表單的電子郵件寄送-SmtpMail類別的屬性和方法
範例2: 寄送電子郵件 <%@ Page Language="VB" %> <%@ Import Namespace="System.Web.Mail" %> <html> <head> <title>範例11_02:電子郵件寄送</title> <script Language="VB" runat="server"> Sub sendEmail_Click(s as object, e as eventargs) '設定email物件 Dim mail As new MailMessage 'Dim SmtpServer As SmtpMail = New SmtpMail() '設定收件者 mail.To = "wangdaj@mail.nkmu.edu.tw" '設定寄件者 mail.From = "wangdaj@mail.nkmu.edu.tw" '設定副本收件者 mail.Cc = "wangdaj@mail.nkmu.edu.tw" '指定郵件格式 If emailFormat.Checked Then mail.BodyFormat = MailFormat.Html 'HTML格式 else '文字格式 mail.BodyFormat = MailFormat.Text End If '設定優先等級 mail.Priority = MailPriority.Normal '主旨 mail.Subject = emailSubject.Text '本文 mail.Body = emailBody.Text '設定SMTP伺服器 SmtpMail.SmtpServer = "mail.nkmu.edu.tw" '寄出郵件 SmtpMail.Send(mail) msg.Text = "電子郵件已經寄出...<br>" End Sub </script> </head> <body> <center><h2>表單的電子郵件寄送</h2></center> <hr> <form runat="server"> <b>地址: </b><asp:TextBox id="emailTo" runat="Server" /><br> <b>主旨: </b><asp:TextBox id="emailSubject" runat="Server" /><br> <b>內容: </b><asp:CheckBox id="emailFormat" runat="Server" /> <b>HTML格式</b><br> <asp:TextBox id="emailBody" TextMode="MultiLine" Columns="30" Rows="10" runat="Server" /> <br> <asp:Button Text="寄出" OnClick="sendEmail_Click" runat="Server" /> </form> <asp:Label id="msg" runat="Server" /> </body> </html>
電子郵件的附檔處理 當Web表單輸入郵件內容且選擇好附檔後,需要先上傳附檔,如下所示: uploadFile = temp_path & "/" & _ Path.GetFileName(fileName.FileName) fileName.SaveAs(uploadFile) 程式碼在上傳好郵件的附檔後,就可以建立附檔的MailAttachment物件,如下所示: Dim mailAttachedFile As MailAttachment=New _ MailAttachment(uploadFile) mail.Attachments.Add(mailAttachedFile) 程式碼建立好MailAttachment物件,然後將附檔新增到Attachments屬性的集合物件。
範例3: 有附件檔案的電子郵件 <%@ Page Language="VB" %> <%@ Import Namespace="System.Web.Mail" %> <%@ Import Namespace="System.IO" %> <html> <head> <title>範例11_03:電子郵件寄送附件檔</title> <script Language="VB" runat="server"> Sub sendEmail_Click(s as object, e as eventargs) '設定email物件 Dim mail As new MailMessage 'Dim SmtpServer As SmtpMail = New SmtpMail() '設定收件者 mail.To = "wangdaj@mail.nkmu.edu.tw" '設定寄件者 mail.From = "wangdaj@mail.nkmu.edu.tw" '設定副本收件者 mail.Cc = "wangdaj@mail.nkmu.edu.tw" '指定郵件格式 If emailFormat.Checked Then mail.BodyFormat = MailFormat.Html 'HTML格式 else '文字格式 mail.BodyFormat = MailFormat.Text End If '設定優先等級 mail.Priority = MailPriority.Normal '主旨 mail.Subject = emailSubject.Text '本文 mail.Body = emailBody.Text Dim temp_path As String = Server.MapPath("/") Dim uploadFile As String = "" '取得HttpPostedFile物件 Dim fileName As HttpPostedFile = attachedFile.PostedFile '檢查檔案是否有內容 If fileName.ContentLength <> Nothing Then '上傳檔案儲存的路徑 uploadFile = temp_path & "/" & Path.GetFileName(fileName.FileName) fileName.SaveAs(uploadFile) '在電子郵件加上附檔 Dim mailAttachedFile As MailAttachment = New MailAttachment(uploadFile) mail.Attachments.Add(mailAttachedFile) End If '設定SMTP伺服器 SmtpMail.SmtpServer = "mail.nkmu.edu.tw" '寄出郵件 SmtpMail.Send(mail) msg.Text = "電子郵件已經寄出...<br>" '刪除上傳的暫存檔案 If uploadFile <> "" Then File.Delete(uploadFile) End Sub </script> </head>
<body> <center><h2>電子郵件寄送附檔</h2></center> <hr> <form enctype="multipart/form-data" runat="server"> <b>地址: </b><asp:TextBox id="emailTo" runat="Server" /><br> <b>主旨: </b><asp:TextBox id="emailSubject" runat="Server" /><br> <b>內容: </b><asp:CheckBox id="emailFormat" runat="Server" /> <b>HTML格式</b><br> <asp:TextBox id="emailBody" TextMode="MultiLine" Columns="30" Rows="10" runat="Server" /> <br> <b>附檔: </b><input type="File" id="attachedFile" size="30" runat="server" /> <br> <asp:Button Text="寄出" OnClick="sendEmail_Click" runat="Server" /> </form> <asp:Label id="msg" runat="Server" /> </body> </html>