8

2GB を超える (.iso) ファイルをアップロードする必要があるイントラネット アプリケーションがあります。2GB のファイル サイズには多くの制限要因があるようです。

  1. IE 内にはブラウザの制限があり、IE 9/10 のみが 2GB を超えることができますEric Law によると
  2. httpRuntimemaxRequestLength要素はInt32 型で、最大値は 2097151、約 2GB です。

uint 型であるため、maxAllowedContentLength を使用してさらに別のファイル サイズ制限を約 4GB に設定できるようですが、maxRequestLength から 2GB に制限されている場合、それは何の役に立つのでしょうか?

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="4294967295" />
    </requestFiltering>
  </security>
<system.webServer>

2GB の制限を超えてファイルをアップロードするための解決策はありますか?

4

3 に答える 3

4

JavaScript ソリューションに対応していますか??. その場合は、大量のデータ (大量の GB) をアップロードできるこのjQuery プラグインを試してください。HTML5 FileReader API 機能と Silverlight フォールバックを使用してファイルをアップロードします (対応する ACK を使用して TCP/IP 送受信パッケージに触発されたメカニズムをブラウザーがサポートしていない場合)。ファイルは、構成されたサイズのチャンク (デフォルトは 4 MB) ごとにアップロードされます。

プラス: ファイル キュー モードも付属しています。

Razor ビューでの使用方法のサンプルを次に示します。

$(function () {

    var file = $("#file").createUploaderHtml5({
        postDataUrl: "@Url.Action("Upload", "Home")",
        packetSize: 4 * 1024 * 1024,
        onPreparingUpload: function (plugin, ufname, umime, usize) {
            plugin.settings.logger("ufname = [" + ufname + "] umime = [" + umime + "] usize = [" + usize + "]");
            return true;
        },
        onInitPacketArrived: function (plugin, guid) {
            plugin.settings.logger("guid = [" + guid + "]");
        },
        onDataPacketArrived: function (plugin, ack, total) {
            //plugin.settings.logger("ACK [" + ack.Guid + "] packet = [" + ack.Packet + "] total = [" + total + "]");
            var percent = Math.round(ack.Packet / total * 100);
            $("#progressbar").attr("value", percent);
            $("#percent").html(percent + " %");
        },
        onFileUploaded: function (pl) {
            pl.settings.logger("File finished!!!");
        },
        logger: function(msg) {
            var lg = $("#logger");
            lg.html(lg.html() + msg + "<br />");
        }
    });

    $("#start").click(function () {
        file.startUpload();
    });

    $("#stop").click(function () {
        file.cancelUpload();
    });

});

アップロード アクションのコードは次のとおりです。

[HttpPost]
public ActionResult Upload(FormCollection collection)
{
    var packetSize = 4 * 1024 * 1024; // default to 4 MB
    var filePath = Server.MapPath("~/_temp_upload/");

    var result = UploadHelper.ProcessRequest(Request, filePath, packetSize);

        if (result != null)
        {
            var metadata = UploadHelper.GetMetadataInfo(filePath, result.Guid);
            // do anything with the metadata
        }

        if (result != null)
            return Json(result);
        return Content("");
    }
于 2013-05-24T15:57:11.423 に答える