【ASP.NET コントロール】FileUploadコントロール ~あれこれ編~

使用上の注意

直接URL入力について

概要

以下にあるように、セキュリティの問題から、IE8から直接URL入力ができなくなったらしい。
http://d.hatena.ne.jp/replication/20100714/1279062531
http://adiary.blog.abk.nu/0247#k247p4
http://d.hatena.ne.jp/language_and_engineering/20100909/p1
逆に言うと、IE7以前のVersionでは直接URL入力できる。
で、ユーザーが間違えて、不正な文字列(例「aaa」)を入力した場合、ポストバックがかからないという現象が起きてしまう(以下を参照)
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=42905&forum=28
そこで、上記問題を回避するために、IE7でも直接入力を不可にする。

サンプル:直接URL入力不可にする実装

* ただし、JSが有効であることが前提である。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Me.FileUpload1.Attributes.Add("onKeyDown", "return false;");

End Sub
* このままだと日本語入力できてしまうので「style="ime-mode: disabled;"(ただしIEのみ)」などで対応する
* このままだとタブキーまで弾くので、それを考慮した方がいい


ファイル サイズ制限について

 * サイズ制限を変更するには、machine.config ファイル、あるいは web.config ファイルのいずれかに変更する必要がある。
http://msdn.microsoft.com/ja-jp/library/aa478971.aspx
より、抜粋。

<httpRuntime
 executionTimeout="90"
 maxRequestLength="4096"
 useFullyQualifiedRedirectUrl="false"
 minFreeThreads="8"
 minLocalRequestFreeThreads="4"
 appRequestQueueLimit="100"
/>


ファイルアップロード中に処理中(プログレスバーなど)を表示するために

 * 方法1: 以下を使う。(試してないけど)
http://www.codeproject.com/KB/webforms/FileUploadWithProgrss.aspx
 * 方法2:以下のような方法を使って、自作する。(試してないけど)

 jQueryなんかも併用すれば、実装できそうな気がするが。。。
http://d.hatena.ne.jp/oui27/20090808/1249703799
http://dobon.net/vb/dotnet/internet/webrequestpost.html#section6
http://devadjust.exblog.jp/9467833/

UpdateProgressコントロールとの関連について

 * ファイル・アップロードのFileUploadコントロールにはUpdatePanelコントロールと組み合わせて利用することはできないため、UpdateProgressコントロールも使えない。

UpdateProgressコントロールについては、以下に記載。
http://blogs.yahoo.co.jp/dk521123/26721609.html
AsyncFileUploadコントロールもあるが、色々試したが使いづらい。(下記「メモ」に、別方法で実装する方法を調べ中)

関連記事

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

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

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

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