最近、「新館」の方をいろいろいじくっている。残念ながら、その成果はまだ公開できる状態にはなっていないのだが、その過程でもいろいろネタは溜まっていく。ということで、今回はそのうちのひとつ、「大きなファイルをアップロードできるようにする」である。
ASP.NETの標準では、セキュリティを考慮して4GBを超えるサイズのファイルのアップロードを許可していない。以前は気にならなかったこの制限も、写真ファイルのサイズが4GBを超える最近では、現実的な問題となってきた。そこで、その制限を除去しようと思い立ったのである。幸い、アップロードは自分で行うもので、第三者に公開している機能ではないので、セキュリティ的な驚異にはならないと考えている。
具体的には、machine.configファイルに<httpRuntime>セクションを加え、パラメータmaxRequestLengthに上限のサイズをKB単位で与えるだけである。ただし、自前のサーバならともかく、ホスティングなどでmachine.configファイルを触ることができない場合、web.configファイルを書き換えればよい。
書き換える場所は、<system.web>セクションである。ここにパラメータmaxRequestLengthとともに<httpRuntime>セクションを加える。
<system.web>
<httpRuntime maxRequestLength="8192" />
………
この場合、8MBが上限となる。
この制限に気付いたのは、アップロードできる写真とできない写真があることに気付き、アップロードできないときにはIE8が「このページはInternet Expolorerでは表示できません。」といったエラー画面を表示することからだ。最初は何のことかわからず、説明を見てもネットワークの接続に問題がある、DNSにエラーがあるとかそんなことばかりなので、ローカルのテストにまさかそんなことはあるまいと思っていたのだが、真相は上記のようなことだったのだ。
もう少しまともにエラーメッセージを返してくれると助かる。というか、返せといいたい。まぁ、HTTPの構造上、アップロードされる前に何とかしなければならないから、ネットワーク的にエラーとするしかないというのはわかるが。これは、IE8の問題というよりも、ASP.NETの問題だろう。