Asp.net-file-uploading

提供:Dev Guides
移動先:案内検索

ASP.NET-ファイルのアップロード

ASP.NETには、ユーザーがWebサーバーにファイルをアップロードできる2つのコントロールがあります。 サーバーがポストされたファイルデータを受信すると、アプリケーションはそれを保存、チェック、または無視できます。 次のコントロールは、ファイルのアップロードを許可します。

  • HtmlInputFile -HTMLサーバーコントロール
  • FileUpload -およびASP.NET Webコントロール

両方のコントロールはファイルのアップロードを許可しますが、FileUploadコントロールはフォームのエンコーディングを自動的に設定しますが、HtmlInputFileはそうしません。

このチュートリアルでは、FileUploadコントロールを使用します。 FileUploadコントロールを使用すると、ユーザーはアップロードするファイルを参照して選択し、ファイル名を入力するための参照ボタンとテキストボックスを提供できます。

ユーザーがテキストボックスに名前を入力するか参照してファイル名を入力すると、FileUploadコントロールのSaveAsメソッドを呼び出してファイルをディスクに保存できます。

FileUploadの基本的な構文は次のとおりです。

<asp:FileUpload ID= "Uploader" runat = "server"/>

FileUploadクラスはWebControlクラスから派生し、そのすべてのメンバーを継承します。 これらとは別に、FileUploadクラスには次の読み取り専用プロパティがあります。

Properties Description
FileBytes Returns an array of the bytes in a file to be uploaded.
FileContent Returns the stream object pointing to the file to be uploaded.
FileName Returns the name of the file to be uploaded.
HasFile Specifies whether the control has a file to upload.
PostedFile Returns a reference to the uploaded file.

投稿されたファイルは、HttpUpedFile型のオブジェクトにカプセル化され、FileUploadクラスのPostedFileプロパティを介してアクセスできます。

HttpPostedFileクラスには、次の頻繁に使用されるプロパティがあります。

Properties Description
ContentLength Returns the size of the uploaded file in bytes.
ContentType Returns the MIME type of the uploaded file.
FileName Returns the full filename.
InputStream Returns a stream object pointing to the uploaded file.

次の例は、FileUploadコントロールとそのプロパティを示しています。 フォームには、FileUploadコントロールと、保存ボタン、およびファイル名、ファイルタイプ、ファイル長を表示するラベルコントロールがあります。

デザインビューでは、フォームは次のようになります。

ファイルのアップロード

コンテンツファイルのコードは次のとおりです。

<body>
   <form id="form1" runat="server">

      <div>
         <h3> File Upload:</h3>
         <br/>
         <asp:FileUpload ID="FileUpload1" runat="server"/>
         <br/><br/>
         <asp:Button ID="btnsave" runat="server" onclick="btnsave_Click"  Text="Save" style="width:85px"/>
         <br/><br/>
         <asp:Label ID="lblmessage" runat="server"/>
      </div>

   </form>
</body>

保存ボタンの背後にあるコードは次のとおりです。

protected void btnsave_Click(object sender, EventArgs e)
{
   StringBuilder sb = new StringBuilder();

   if (FileUpload1.HasFile)
   {
      try
      {
         sb.AppendFormat(" Uploading file: {0}", FileUpload1.FileName);

        //saving the file
         FileUpload1.SaveAs("<c:\\SaveDirectory>" + FileUpload1.FileName);

        //Showing the file information
         sb.AppendFormat("<br/> Save As: {0}",  FileUpload1.PostedFile.FileName);
         sb.AppendFormat("<br/> File type: {0}",    FileUpload1.PostedFile.ContentType);
         sb.AppendFormat("<br/> File length: {0}",  FileUpload1.PostedFile.ContentLength);
         sb.AppendFormat("<br/> File name: {0}",  FileUpload1.PostedFile.FileName);

      }catch (Exception ex)
      {
         sb.Append("<br/> Error <br/>");
         sb.AppendFormat("Unable to save file <br/> {0}", ex.Message);
      }
   }
   else
   {
      lblmessage.Text = sb.ToString();
   }
}

次の点に注意してください。

  • StringBuilderクラスはSystem.IO名前空間から派生しているため、含める必要があります。
  • tryブロックとcatchブロックはエラーをキャッチするために使用され、エラーメッセージを表示します。