国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET 2.0高級控件之FileUpload控件

2024-07-10 13:09:06
字體:
來源:轉載
供稿:網友

  應用程序中經常需要允許用戶把文件上傳到web服務器。盡管在asp.net 1.x也可以完成該功能,但在asp.net 2.0中使用fileupload控件會更簡單。

  該控件讓用戶更容易地瀏覽和選擇用于上傳的文件,它包含一個瀏覽按鈕和用于輸入文件名的文本框。只要用戶在文本框中輸入了完全限定的文件名,無論是直接輸入或通過瀏覽按鈕選擇,都可以調用fileupload的saveas方法保存到磁盤上。

  除了從webcontrol類繼承的標準成員,fileupload控件還公開了幾個只讀的屬性,在表5-8和表5-9列出。

  表5-8 fileupload控件屬性

名  稱 類型 說  明
filecontent stream × 返回一個指向上傳文件的流對象
filename string × 返回要上傳文件的名稱,不包含路徑信息
hasfile boolean × 如果是true,則表示該控件有文件要上傳
postedfile httppostedfile × 返回已經上傳文件的引用。表5-9列出了它所公開的只讀屬性

  表5-9 httppostedfile屬性

名  稱 類  型 說  明
contentlength integer × 返回上傳文件的按字節表示的文件大小
contenttype string × 返回上傳文件的mime內容類型
filename string × 返回文件在客戶端的完全限定名
inputstream stream × 返回一個指向上傳文件的流對象

  所有這些屬性將在下面的示例中說明。

  為了查看fileupload控件在實際中的運用,創建一個fileuploaddemo網站。在頁面上添加一個fileupload控件,然后,添加兩個asp.net按鈕,text屬性分別設置為save和display,id分別設置為btnsave和btndisplay。增加兩個label控件,并分別將id設置為lblmesage和lbldisplay。用<br/>html元素分隔這些控件。切換到設計視圖,通過雙擊每個按鈕,為它們在代碼隱藏文件中創建具有默認名稱的click事件處理程序。完成后的內容文件類似于示例5-11。

  示例5-11:fileuploaddemo網站的default.aspx

<%@ page language=”c#” autoeventwireup=”true” codefile=”default.aspx.cs” inherits=”_default” %>
<!doctype html public “-//w3c//dtd xhtml 1.1//en” “http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml” >
<head runat=”server”>
 <title>fileupload control</title>
</head>

<body>
 <form id=”form1” runat=”server”>
 <div>
  <h1>fileupload control</h1>
  <asp:fileupload id=”fileupload1” runat=”server” />
  <br />
  <asp:button id=”btnsave” runat=”server” text=”save” onclick=”btnsave_click” />
  <asp:button id=”btndisplay” runat=”server” text=”display” onclick=”btndisplay_click” />
  <br />
  <br />
  <asp:label id=”lblmessage” runat=”server” />
  <asp:label id=”lbldisplay” runat=”server” />
 </div>
 </form>
</body>
</html>

  在代碼隱藏文件中,添加示例5-12中高亮顯示的代碼,非高亮顯示的代碼由vs2005自動創建。

  示例5-12:fileuploaddemo網站的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;
using system.io; // 使用stream必需

public partial class _default : system.web.ui.page
{
 protected void page_load(object sender, eventargs e)
 {}
 protected void btnsave_click(object sender, eventargs e)
 {
  string str = “”;
  if (fileupload1.hasfile)
  {
   try
   {
    str += “uploading file: “ + fileupload1.filename;
    // 保存文件
    fileupload1.saveas(“c://websites//uploads//” + fileupload1.filename);
    // 顯示文件信息
    str += “<br/>saved as: “ + fileupload1.postedfile.filename;
    str += “<br/>file type: “ + fileupload1.postedfile.contenttype;
    str += “<br/>file length (bytes): “ + fileupload1.postedfile.contentlength;
    str += “<br/>postedfile file name: “ + fileupload1.postedfile.filename;
   }
   catch (exception ex)
   {
    str += “<br/><b>error</b><br/>unable to save
c://websites//uploads//” + fileupload1.filename +“<br/>” + ex.message;
   }
  }
  else
  {
   str = “no file uploaded.”;
  }
  lblmessage.text = str;
  lbldisplay.text = “”;
 }

 protected void btndisplay_click(object sender, eventargs e)
 {
  string str = “<u>file: “ + fileupload1.filename + “</u><br/>”;
  if (fileupload1.hasfile)
  {
   try
   {
    stream stream = fileupload1.filecontent;
    streamreader reader = new streamreader(stream);
    string strline = “”;
    do
    {
     strline = reader.readline( );
     str += strline;
    } while (strline != null);
   }
   catch (exception ex)
   {
    str += “<br/><b>error</b><br/>unable to display “ + fileupload1.filename +
“<br/>” + ex.message;
   }
  }
  else
  {
   str = “no file uploaded.”;
  }
  lbldisplay.text = str;
  lblmessage.text = “”;
 }
}

  高亮顯示的using聲明對于不使用完全限定命名空間,而使用stream對象是必須的。

  在save按鈕的btnsave_click事件處理程序中,fileupload控件的hasfile屬性用于檢測文本框中是否輸入了有效的完全限定文件名。如果文本框為空或輸入的名稱無效,將不會通過檢測,并且lblmessage將顯示“no file upladed”。

  假定上傳了一個有效文件,那么將執行try代碼塊中的代碼。關鍵語句是調用file- upload控件的saveas方法。該方法使用硬編碼路徑和filename屬性傳遞一個完全限定的文件名。該語句可能會由于各種原因而失敗,包括磁盤空間不足、無效的路徑或安全問題(稍后會有更詳細的說明)。

  如果saveas方法失敗,則執行catch代碼塊。在lblmessage中顯示一個錯誤信息,包括該異常的message屬性ex.message。

  如果saveas方法執行成功,關于上傳文件的多個信息將顯示在lblmessage中,這些信息通過fileupload.postedfile(類型為httppostedfile)中的屬性獲取。

  display按鈕的click事件處理程序與前面的類似,只不過它不是顯示文件信息,而是顯示文件內容。它通過使用filecontent屬性獲取表現為stream對象的上傳文件的內容,然后這個stream對象被用于實例化一個streamreader對象。streamreader的read- line方法逐行的遍歷文件,然后把合并后的字符串顯示在lbldisplay中。

  當在討論從客戶端上傳文件到web服務器時,安全是非常讓人關注的。須注意兩點,首先,使用這種方式會公開web服務器,從而會有非常大的安全漏洞,為此要特別細心。因為這樣不僅可以上傳病毒,木馬和其他惡意軟件,還會存在客戶端瀏覽web服務器目

  錄結構的危險。因此,應該使用硬編碼目標目錄,至少嚴格限定在哪里保存上傳的文件。

  另外,要注意的一點是,允許在磁盤寫文件所必需的權限。在開發web應用程序時,一般情況下,開發機器同時也是web服務器,特別是使用vs2005默認的開發模式。在該模式下使用的是內置的web服務器,并且不通過iis訪問網站而是由文件系統訪問網站。這樣,永遠也不會有權限問題。

  然而,當網站部署到產品服務器上,且該網站通過iis和虛擬目錄來訪問時,就會出現問題。這是因為運行asp.net的賬戶必須擁有對用于保存上傳文件的目錄的寫權限。在windows2000/xp中,賬戶的名稱是aspnet。在windows server2003中,寫權限必須分配給iis_wpg賬戶組。

  利用fileupload控件并結合良好的安全防護,用戶可以把自己的文件傳送到網站,以豐富網站功能。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 璧山县| 巩义市| 前郭尔| 盘锦市| 龙陵县| 武乡县| 伊金霍洛旗| 上思县| 长岭县| 锡林郭勒盟| 喀什市| 淮南市| 册亨县| 陕西省| 贵州省| 吉安市| 西峡县| 临颍县| 资兴市| 长治县| 金昌市| 葵青区| 崇阳县| 宁陕县| 伊宁市| 偃师市| 应用必备| 开封市| 江华| 从江县| 稻城县| 灵武市| 金塔县| 旅游| 隆昌县| 元谋县| 定州市| 垦利县| 华宁县| 凤翔县| 惠来县|