【C#】【html5】.NET Framework 4 で複数ファイルアップロード
今まではFlashなどを使わなければ実現不可能だった複数ファイルアップロードですが、html5ではinput type="file"にmuliple属性を付けるだけでできるようになりました。
<input type="file" name="example" multiple>
この機能はもちろん.NETでもサポートされており、.NET4.5で追加された機能を使えば簡単に実装できます。
しかし、私の会社の環境は.NET4.0…。なんだ結局複数ファイルアップロードできないのかよ!!と思いきやあっさりできたので忘備しておきます。
以下は.NET4.5で実装した例。
■html
<asp:FileUpload ID="FileUpload" runat="server" AllowMultiple="true"/>
■C#
protected void btnUpload_Click(object sender, EventArgs e) { if(FileUpload.HasFiles) { foreach(var file in FileUpload.PostedFiles) { Response.Write(file.FileName + " <br />"); } } }
そして.NET4.0で実装した例。
■html
<asp:FileUpload ID="FileUpload" runat="server"/>
■JavaScript(jQuery使用)
/* DOMロード時の処理を実装する。 */ $(document).ready(function () { // ファイルアップロードフォームの初期化 // multiple属性を設定 $('#<%=FileUpload.ClientID %>') .attr("multiple", "multiple"); });
■C#
protected void btnUpload_Click(object sender, EventArgs e) { HttpFileCollection files = Request.Files; for (int i = 0; i < files.Count; i++) { Response.Write(files[i].FileName + " <br />"); } }
JavaScriptで属性を設定するあたりはエレガントさに欠けるけど、それで複数ファイルアップロードが実現できるなら安いものよ!
プライドよりも実益!可読性より仕様実現!
ちなみに、html5を使用した複数ファイルアップロードですが、Win版のSafari5.1系では動作しません。
理由はWin版Safariの不具合。Mac版だと動く(確認済)。古いWin版Safariでも動く。
なんじゃそりゃーって感じですが、動かないものは仕方がないので、うちのツールでは使用しないように注意書きして済ましました。
一般ユーザーが使用する可能性があるなら、Win版Safariの場合は普通のファイルアップロードに切り替えるのが良いかもしれないですね。