none
FileUpload コントロールの動作?を知りたく RRS feed

  • 質問

  • 素人で申し訳ございませんが、質問させてください。

    マイクロソフトさんのページでは
    >ユーザーがアップロードするファイルを選択してページを送信すると、
    >ファイルは要求の一部としてアップロードされます。
    >ファイルはそのままサーバーのメモリにキャッシュされます。
    と書かれております。
    10Mのファイルをアップすると10Mまるまるメモリへキャッシュされるのでしょうか?

    と言いますのもどこか(MSさん以外)のページで
    「AP2.0では、80KBを超えたアップロードデータをディスクに保存していく
     ディスクバッファリングオプションを導入することで更なる改善が図られた」
    と書かれたものを見まして、どちらが正しいのか判断できずにおります。

    また、ウィルス対策ソフトが導入されている場合、どの時点で検査されるのでしょうか?
    と言いますのも、HasFile=Trueでもウィルス対策ソフトがウィルスを検知して
    削除されているってことはないのであろうか?と疑問を抱きましたもので

    ご存知の方がいらっしゃいましたら、ご教授くださいますようお願いいたします。

     

    2011年3月23日 1:52

回答

  • > 10Mのファイルをアップすると10Mまるまるメモリへキャッシュされるのでし
    > ょうか?

    そうです。ただし、制限があります。

    httpRuntime 要素の maxRequestLength 属性で制限を受けます。デフォルトで
    は 4096 (4 MB) です。

    httpRuntime 要素 (ASP.NET 設定スキーマ)
    http://msdn.microsoft.com/ja-jp/library/e1f13641%28VS.80%29.aspx

    さらに IIS7, IIS7.5 では applicationHost.config の requestFiltering 要
    素の requestLimits 子要素の設定でも制限を受けます。

    要求制限 <requestLimits>
    http://technet.microsoft.com/ja-jp/library/ee431638.aspx

    > 「AP2.0では、80KBを超えたアップロードデータをディスクに保存していく
    > ディスクバッファリングオプションを導入することで更なる改善が図られた」

    AP2.0 とは何かとか、ディスクにバッファリングすると何が改善できるのか意
    味不明ですが、「マイクロソフトさんのページ」が正しいと思います。

    > ウィルス対策ソフトが導入されている場合、どの時点で検査されるのでしょ
    > うか?

    ウィルス対策ソフトがどうなっているかによるのでは? なんにせよ ASP.NET
    は関係なさそうです。

    • 回答としてマーク 山本春海 2011年4月7日 5:36
    2011年3月24日 12:57

すべての返信

  • > 10Mのファイルをアップすると10Mまるまるメモリへキャッシュされるのでし
    > ょうか?

    そうです。ただし、制限があります。

    httpRuntime 要素の maxRequestLength 属性で制限を受けます。デフォルトで
    は 4096 (4 MB) です。

    httpRuntime 要素 (ASP.NET 設定スキーマ)
    http://msdn.microsoft.com/ja-jp/library/e1f13641%28VS.80%29.aspx

    さらに IIS7, IIS7.5 では applicationHost.config の requestFiltering 要
    素の requestLimits 子要素の設定でも制限を受けます。

    要求制限 <requestLimits>
    http://technet.microsoft.com/ja-jp/library/ee431638.aspx

    > 「AP2.0では、80KBを超えたアップロードデータをディスクに保存していく
    > ディスクバッファリングオプションを導入することで更なる改善が図られた」

    AP2.0 とは何かとか、ディスクにバッファリングすると何が改善できるのか意
    味不明ですが、「マイクロソフトさんのページ」が正しいと思います。

    > ウィルス対策ソフトが導入されている場合、どの時点で検査されるのでしょ
    > うか?

    ウィルス対策ソフトがどうなっているかによるのでは? なんにせよ ASP.NET
    は関係なさそうです。

    • 回答としてマーク 山本春海 2011年4月7日 5:36
    2011年3月24日 12:57
  • SurferOnWwwさま

    コメントありがとうございます。

    2011年3月28日 23:48
  • こんにちは、takemaru さん。

    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。

    参照されているのは以下の内容でしょうか?
    どちらの情報も、マイクロソフトや 元 マイクロソフト社員からのものみたいですね。

      FileUpload Web サーバー コントロールの概要
      http://msdn.microsoft.com/ja-jp/library/ms227677(VS.80).aspx

      ScaleUp Addresses Many of IIS’ File Uploading Limitations
      http://www.infoq.com/news/2010/05/ScaleUp

      IIS 7.0 Server-Side
      http://mvolo.com/blogs/serverside/archive/2010/05/04/Brief-History-of-Web-Uploads.aspx

    上記にある弊社ドキュメントに記載の動作が間違っているということであれば、有償サポートへの問い合わせをご検討いただいたほうがいいかもしれません。
    ただ、製品の内部動作については回答してもらえないこともあるかもしれませんが。。。

    SurferOnWww さんからの情報はリクエストの制限など、他の方にも参考になる情報と思いましたので、勝手ながら回答としてマークさせていただきました。
    SurferOnWww さん、情報ありがとうございます。

    ご質問内容にウィルス対策ソフトの話が出てきたりして、何のためにどういったことを知る必要があるのか背景がわからないのですが、
    少なくとも、ウィルス対策ソフトの動作はその開発元にご質問いただいたほうがいいかなと思います。

    今後ともMSDN フォーラムをよろしくお願いします。それでは。
                                                                                                                                                    
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2011年4月7日 5:36
  • 先のレスで以下のように書いたのですが、

    >> 10Mのファイルをアップすると10Mまるまるメモリへキャッシュされるのでし
    >> ょうか?

    >そうです。ただし、制限があります。

    間違ってました、すみません。「10Mまるまるメモリへキャッシュされる」のではなく
    て、ある値を超えるとメモリではなくディスクにバッファリングされるそうです。

    その「ある値」というのは、httpRuntime 要素の requestLengthDiskThreshold 属性の
    設定値らしいのですが、MSDN ライブラリに書いてあることが以下のようにいろいろ違
    っていて、一体どれが正しいのかわかりません。

    FileUpload クラス:既定値は 256 バイトです。

    HttpPostedFile クラス:サイズが 256 KB を超える・・・

    HttpRuntimeSection.RequestLengthDiskThreshold プロパティ:既定値は 256 バイトです。

    httpRuntime 要素の requestLengthDiskThreshold 属性
          .NET 2.0, 3.0: 既定値は 256 です。
          .NET 3.5, 4:   既定値は、80 KB です。

    実際に HttpRuntimeSection.RequestLengthDiskThreshold プロパティでデフォルト値を取
    得してみたところ、.NET 3.5, 4 の場合 80 でした。

    HttpRuntimeSection.RequestLengthDiskThreshold プロパティの説明では取得できるのは
    バイト数だそうですが、80 バイトではなくて、80KB が正解のように思われます。

    2011年4月7日 13:39