IIS7 ファイルアップロード用ページを簡単に作成する方法
ASP.NET が動作するように構成された Web サイト向けの、ファイルをアップロードするページを紹介したいと思います。
Web サイトを運営していると、ユーザーにファイルをアップロードさせたいというニーズが発生する場合があります。
FTP や WebDav を構成できるのであれば、それを使用してもいいのですが、ブラウザベースで行いたい場合は、サーバーサイドで動作するファイルアップロード用のプログラムを用意する必要がありました。
IIS7 でも、サーバーサイドで動作するコードを記述する必要がありますが、必要となるコードの量は存外に少なく、簡単なページでファイルアップロードの機能を実装できます。
以下に手順を示します。
手順
ASP.NET が動作するように構成された Web サイト、あるいは仮想ディレクトリを用意します。
※前回までの記事で紹介したような Web フォーム認証が動作する環境であれば問題ありません。
同 Web サイトの物理フォルダにに upload という名前でフォルダを作成し、アカウント NETWORK SERVICE に対し、"変更" の権限を付与します。
Web サイトが使用しているアプリーションプールの実行アカウントを NETWORK SERVICE を変更します。
変更の仕方が不明な場合は、以下のドキュメントを参照してください。『IIS 7.0: アプリケーション プールの ID を指定する』
https://technet.microsoft.com/ja-jp/library/cc771170(WS.10).aspx以下の内容をテキストエディタに貼り付けて、upload.aspx という名前で保存し、Web サイトに配置します。
<%@ Page Language="C#" %><script runat="server"> string resultMsg; protected void uploadButton_Click(object sender, EventArgs e) { string fileName = FileUpload1.FileName; PlaceHolder1.Visible = false; PlaceHolder2.Visible = true; try { FileUpload1.SaveAs(Request.PhysicalApplicationPath + "\\upload\\" + fileName); resultMsg = "ファイル \"" + fileName + "\" をアップロードしました。"; } catch(Exception exp) { resultMsg = "ファイルのアップロードに失敗しました。<br />原因 : " + exp.Message; } }</script>
<html><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <asp:PlaceHolder ID="PlaceHolder1" runat="server"> <!-- アップロード前の画面 --> <asp:FileUpload ID="FileUpload1" runat="server" /> <br /> <asp:Button ID="uploadButton" runat="server" onclick="uploadButton_Click" Text="アップロード" /> <!-- ここまで ---> </asp:PlaceHolder> <asp:PlaceHolder ID="PlaceHolder2" Visible="false" runat="server"> <!-- アップロード後の画面 --> <%=resultMsg%> <!-- ここまで ---> </asp:PlaceHolder> </form></body></html>
ブラウザから配置した upload.aspx にアクセスします。
以下のような、ファイルアップロード用の画面が表示されるので、[参照] ボタンをクリックしてファイルを選択後、[アップロード] ボタンをクリックして実際にファイルがアップロードがされるかご可能ください。
なお、アップロードされたファイルは、Web サイト内の upload フォルダに保存されます。
ファイルの保存場所を変更するには、ソースコード中の \\upload\\ を、任意のフォルダ名に変更してください。ちなみに、フォルダ名 "upload" の前後がフォントの関係でバックスラッシュ (\) で表示されていますが、正しくは "¥¥upload¥¥" です。
お手数ですが、コードを試すさいには修正してお使いくださいませ。
※タイトルに "IIS7" と書いてますが、このファイルアップーロード用のページについては IIS6.0 でも、ASP.NET が動作する環境であれば動作すると思います。
それと、ユーザーからアップロードされるファイルの種類、ファイルが使用するディスクサイズが気になる場合は、以前このブログで紹介したファイルスクリーンと、ディスククォータの機能を組み合わせると良いでしょう。