サーバにファイルをアップロードするにはどうしたらいいでしょうか。
ということで、以下はファイルをサーバ上のc:\testフォルダの下にアップロードするサンプルです。
-------------------------------------------------------
<%@ Page language="c#" %>
<html>
<head>
<script runat=server>
void button_Click(Object sender, EventArgs e)
{
if (infile.PostedFile.FileName != "")
{
try
{
string fName = System.IO.Path.GetFileName(infile.PostedFile.FileName);
infile.PostedFile.SaveAs("c:\\test\\" + fName);
Message.Text=fName + "がアップロードされました";
}
catch(Exception exc)
{
Message.Text=(exc.ToString()).Replace("\r\n", "<br />");
}
}
}
</script>
</head>
<body>
<form enctype="multipart/form-data" runat="server">
<input id="infile" type="file" runat="server" /><br />
<asp:Button id="Button" Text="実行" OnClick="button_Click" runat="server"/><br />
<asp:label id="Message" runat="server"/><br />
</form>
</body>
</html>
-------------------------------------------------------
Webコントロールにはファイルをアップロードできるコントロールはないため、HTMLコントロールを利用する必要があります。
また、formのenctypeを"multipart/form-data"にしないと動作しないことに注意が必要です。
SDKのドキュメントに記載されているサンプルだと、PostedFileがnullかどうかでファイルがアップロードされたかどうか判断できそうな記述になってますが、どうもうまく動作しなかったため、ここではFileNameが入っているかどうかで判断しています。
このサンプルでエラーが発生する場合は、たいていフォルダの権限の問題だと思います。
ファイルの保存を行うのはデフォルトではASPNETユーザだということに注意して、必要な権限を与えてください。
追記:
Ver1.1ではformのenctype属性を明示的に追加しなくても、FileInput HTMLコントロールを利用することで自動でenctype属性が追加されるように変更されているようです。
ちょっと便利になりました。
あおい情報システム株式会社 小野修司(どっとねっとふぁん)