【ASP.NET コントロール】FileUploadコントロール ~基本編~

サンプル

 * CSVファイルをサーバ側で保存せずに取り込み、ラベルに出力する

デザイン部

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
  <div>送信するファイルを指定して、[送信]ボタンを押してください。</div>
  <asp:FileUpload ID="FileUpload1" runat="server" />
  <br />
  <asp:Button id="Button1" runat="server" Text="取り込む" />
  <br />
  <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
  <br />
  <asp:Button ID="Button2" runat="server" Text="出力" />
  <br />
</ContentTemplate>
<Triggers>
    <asp:PostBackTrigger ControlID="Button1" />
</Triggers>
</asp:UpdatePanel>
<br />
<asp:UpdateProgress ID="UpdateProgress1" runat="server" 
AssociatedUpdatePanelID="UpdatePanel1" DisplayAfter="100">
<ProgressTemplate>
    <img alt="お待ち下さい。。。" src="Images/loading.gif" />
    お待ち下さい。。。
</ProgressTemplate>
</asp:UpdateProgress>

プログラム部

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Using parser As New TextFieldParser(Me.FileUpload1.PostedFile.FileName, _
                                System.Text.Encoding.GetEncoding("Shift_JIS"))

        parser.TextFieldType = FieldType.Delimited
        parser.SetDelimiters(",") ' 区切り文字はコンマ

        Dim csvDataSet As List(Of String()) = New List(Of String())

        While Not parser.EndOfData
            Dim row As String() = parser.ReadFields() ' 1行読み込み
            csvDataSet.Add(row)
        End While

        ViewState("CsvDataSet") = csvDataSet
        Me.Label1.Text = "成功"
    End Using
End Sub

Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Dim output As String = String.Empty
    Dim csvDataSet = DirectCast(ViewState("CsvDataSet"), List(Of String()))
    For Each csvRow In csvDataSet
        For Each csvData In csvRow
            output += (csvData & "<br />")
        Next
    Next
    Me.Label1.Text = output
End Sub


プロパティ

HasFile:ファイルの存在チェック

 * ファイルが FileUpload コントロールに格納されているかどうかを示す値を取得
 * Fileの存在チェックは、File.Exists()があるが権限がない場合は、falseが返されてしまう
http://msdn.microsoft.com/ja-jp/library/system.io.file.exists%28v=vs.80%29.aspx
より抜粋
呼び出し元が指定したファイルを読み取るための十分なアクセス許可を持たない場合、例外は
スローされず、このメソッドは、path の有無にかかわらず false を返します。 

そのため、以下のHasFileでチェックした方がいい?
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.fileupload_members%28v=VS.80%29.aspx

PostedFile.FileName:クライアント側のファイルフルパス

 * あくまで「クライアント側」のファイルフルパスであることに注意。
   (このパス情報からファイルを生成しないこと!)

関連記事

FileUploadコントロール ~基本編~

http://blogs.yahoo.co.jp/dk521123/26824686.html

FileUploadコントロール ~あれこれ編~

http://blogs.yahoo.co.jp/dk521123/28141457.html