.NET TIPS

[ASP.NET]アプリケーションからASP.NETサイトにファイルをアップロードするには?

デジタルアドバンテージ 遠藤 孝信
2005/07/08

 クライアント・アプリケーションからASP.NETで構築されたWebサイトにファイルを転送(アップロード)したい場合、ASP.NETのファイル・アップロード機能(ファイルのアップロードを受け取る機能)と、WebClientクラス(System.Net名前空間)のUploadFileメソッドを使えば簡単に実装できる。

ファイルのアップロードを行うクライアント・アプリケーション

 まず、クライアント側では次のようなプログラムを用意する。このプログラムはWebClientクラスのUploadFileメソッドを使って、指定されたURLに指定されたファイルをアップロードする(アップロードにはHTTPプロトコルのPOSTメソッドが使用される)。

// uploader.cs

using System;
using System.Net;
using System.Text;

public class Uploader {
  static void Main() {
    string url = "http://localhost/upload.aspx";
    string file = "c:\\test.jpg";

    WebClient wc = new WebClient();
    byte[] ret = wc.UploadFile(url, file);
    string result = Encoding.ASCII.GetString(ret);
    wc.Dispose();

    Console.WriteLine(result);
  }
}

// コンパイル方法:csc uploader.cs
POSTメソッドによりファイルのアップロードを行うC#のプログラム(uploader.cs)
 
' uploader.vb

Imports System
Imports System.Net
Imports System.Text

Public Class Uploader
  Shared Sub Main
    Dim url As String = "http://localhost/upload.aspx"
    Dim file As String = "c:\test.jpg"

    Dim wc As WebClient = new WebClient()
    Dim ret As byte() = wc.UploadFile(url, file)
    Dim result As String = Encoding.ASCII.GetString(ret)
    wc.Dispose()

    Console.WriteLine(result)
  End Sub
End Class

' コンパイル方法:vbc /r:System.dll uploader.vb
POSTメソッドによりファイルのアップロードを行うVB.NETのプログラム(uploader.vb)

 ここでは次項に示すASP.NETページのURLが「http://localhost/upload.aspx」であると仮定している。

 UploadFileメソッドの戻り値は、指定されたURLのページが返すデータをbyte配列として返す。このプログラムではそれを文字列に変換し表示しているが、本稿の場合、この値は次に解説するようにアップロードされたファイルのサイズとなる。

アップロードされたファイルを受け取るASP.NETページ

 サーバ側にはASP.NETのページとして次のような内容のaspxファイルを用意する(本稿の場合、c:\Inetpub\wwwrootディレクトリ配下にファイル名を「upload.aspx」として配置する)。

<Script language="C#" runat=server>

void Page_Load(object sender, EventArgs e) {

  HttpPostedFile posted = Request.Files[0];

  posted.SaveAs(
    "c:\\UploadedFiles\\"
    + System.IO.Path.GetFileName(posted.FileName));
  Response.Write(posted.ContentLength);
}

</Script>
アップロードされたファイルを受け取るC#のASP.NETページ(upload_cs.aspx)
 
<Script language="vb" runat=server>

Sub Page_Load(sender As Object, e As EventArgs)

  Dim posted As HttpPostedFile = Request.Files(0)

  posted.SaveAs( _
    "c:\UploadedFiles\" _
    & System.IO.Path.GetFileName(posted.FileName))
  Response.Write(posted.ContentLength)
End Sub

</Script>
アップロードされたファイルを受け取るVB.NETのASP.NETページ(upload_vb.aspx)

 このASP.NETページはクライアント・プログラムからのみアクセスされるので、通常のWebフォームは持っていない。ページがアクセスされるとPage_Loadメソッドが呼び出されて実行されるだけである。

 Page_Loadメソッドでは、アップロードされたファイルを取得して、ファイルに保存している。この処理はブラウザからアップロードされたファイルを受け取る場合の処理とほぼ同じである。このため、詳細については「TIPS:[ASP.NET]ブラウザからファイルをアップロードできるようにするには?」を参考にしていただきたい。

 そのTIPSでも解説しているように、ページのRequestプロパティのFilesプロパティは、アップロードされたファイルを示すHttpPostedFileクラス(System.Web名前空間)のオブジェクトのコレクションである。複数のファイルが同時に(1回のアクセスで)アップロードされた場合には、このコレクションには複数のHttpPostedFileオブジェクトが含まれることになるが、今回の場合は1つだけと分かっているので、「Request.Files[0]」によりアップロードされたファイルのHttpPostedFileオブジェクトを取得することができる。

 Page_Loadメソッドの最後では、アップロードされたファイルの長さをHttpPostedFileオブジェクトのContentLengthプロパティにより取得して、Rsponse.Writeメソッドによりページの出力としている。上記のクライアント・プログラムで表示しているものはこの値である。この情報はファイルが正しくアップロードされたかどうかを判断するのに利用できる。End of Article

カテゴリ:Webフォーム 処理対象:ファイル・アップロード
カテゴリ:クラス・ライブラリ 処理対象:ネットワーク
使用ライブラリ:WebClientクラス(System.Net名前空間)
使用ライブラリ:HttpPostedFileクラス(System.Web名前空間)
関連TIPS:
[ASP.NET]ブラウザからファイルをアップロードできるようにするには?
 
この記事と関連性の高い別の.NET TIPS
[ASP.NET]ブラウザからファイルをアップロードできるようにするには?
[ASP.NET AJAX]AsyncFileUploadコントロールでファイルを非同期にアップロードするには?
[ASP.NET MVC]ファイルのアップロードを行うには?
[ASP.NET MVC]ASP.NET MVCでアップロードしたファイルをデータベースに登録するには?
WebClientクラスでWebページを取得するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間