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("");
}