Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在ASP.NET MVC中使用plupload软件包?_Asp.net Mvc_Asp.net Mvc 2_Plupload - Fatal编程技术网

Asp.net mvc 如何在ASP.NET MVC中使用plupload软件包?

Asp.net mvc 如何在ASP.NET MVC中使用plupload软件包?,asp.net-mvc,asp.net-mvc-2,plupload,Asp.net Mvc,Asp.net Mvc 2,Plupload,我使用的是1.3.0版 更具体地说,我必须如何定义我的控制器操作来支持分块?我可以使用HttpPosteFileBase作为参数吗 目前,我正在使用以下代码初始化插件 头上的标签 <link type="text/css" rel="Stylesheet" media="screen" href="<%: Url.Content( "~/_assets/css/plupload/jquery.ui.plupload.css" )%>" /> <link type="

我使用的是1.3.0版

更具体地说,我必须如何定义我的控制器操作来支持分块?我可以使用
HttpPosteFileBase
作为参数吗

目前,我正在使用以下代码初始化插件

头上的标签

<link type="text/css" rel="Stylesheet" media="screen" href="<%: Url.Content( "~/_assets/css/plupload/jquery.ui.plupload.css" )%>" />
<link type="text/css" rel="Stylesheet" media="screen" href="<%: Url.Content( "~/_assets/css/plupload/gsl.plupload.css" )%>" />
<script type="text/javascript" src="<%: Url.Content( "~/_assets/js/plupload/gears_init.js" )%>"></script>
<script type="text/javascript" src="<%: Url.Content( "~/_assets/js/plupload/plupload.full.min.js" )%>"></script>
<script type="text/javascript" src="<%: Url.Content( "~/_assets/js/plupload/jquery.ui.plupload.min.js" )%>"></script>

文件准备就绪

$("#uploader").pluploadQueue({
    runtimes: 'html5,html4,gears,flash,silverlight',
    url: '<%: Url.Content( "~/Document/Upload" ) %>',
    max_file_size: '5mb',
    chunk_size: '1mb',
    unique_names: true,
    filters: [
        { title: "Documenti e Immagini", extensions: "doc,docx,xls,xlsx,pdf,jpg,png" }
    ],
    multiple_queues: false
});
$(“#上传程序”).pluploadQueue({
运行时:“html5、html4、gears、flash、silverlight”,
url:“”,
最大文件大小:“5mb”,
块大小:“1mb”,
唯一的名称:true,
过滤器:[
{标题:“Documenti e Immagini”,扩展:“doc、docx、xls、xlsx、pdf、jpg、png”}
],
多个队列:false
});
给你:

[HttpPost]
public ActionResult Upload(int? chunk, string name)
{
    var fileUpload = Request.Files[0];
    var uploadPath = Server.MapPath("~/App_Data");
    chunk = chunk ?? 0;
    using (var fs = new FileStream(Path.Combine(uploadPath, name), chunk == 0 ? FileMode.Create : FileMode.Append))
    {
        var buffer = new byte[fileUpload.InputStream.Length];
        fileUpload.InputStream.Read(buffer, 0, buffer.Length);
        fs.Write(buffer, 0, buffer.Length);
    }
    return Content("chunk uploaded", "text/plain");
}
对于每个区块和上载的每个文件,将多次调用此方法。它将块大小和文件名作为参数传递。我不确定是否可以使用
HttpPostedFileBase
作为操作参数,因为名称不确定。

请看这里:

$("#uploader").pluploadQueue({
         // General settings
         runtimes: 'silverlight',
         url: '/Home/Upload',
         max_file_size: '10mb',
         chunk_size: '1mb',
         unique_names: true,
         multiple_queues: false,

         // Resize images on clientside if we can
         resize: { width: 320, height: 240, quality: 90 },

         // Specify what files to browse for
         filters: [
            { title: "Image files", extensions: "jpg,gif,png" },
            { title: "Zip files", extensions: "zip" }
        ],

         // Silverlight settings
         silverlight_xap_url: '../../../Scripts/upload/plupload.silverlight.xap'
      });

      // Client side form validation
      $('form').submit(function (e) {
         var uploader = $('#uploader').pluploadQueue();

         // Files in queue upload them first
         if (uploader.files.length > 0) {
            // When all files are uploaded submit form
            uploader.bind('StateChanged', function () {
               if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {
                  $('form')[0].submit();
               }
            });

            uploader.start();
         } else {
            alert('You must queue at least one file.');
         }

         return false;
      });
在控制器中:

[HttpPost]
public string Upload(  ) {
          HttpPostedFileBase FileData = Request.Files[0];

          if ( FileData.ContentLength > 0 ) {
             var fileName = Path.GetFileName( FileData.FileName );
             var path = Path.Combine( Server.MapPath( "~/Content" ), fileName );
             FileData.SaveAs( path );
          }

          return "Files was uploaded successfully!";
       }

仅此而已…控制器中不需要块…

Small bug-第7行应为name notfileName@Colin,谢谢你指出这一点。我已经更新了答案。在我的实现中,我的控制器和操作的Url不会执行。上面的方法是如何工作的,而我将我的方法指向相关的“~/Document/Upload”post操作,它甚至没有执行(断点未命中)。试几天。感到沮丧。2.发表评论。希望如此。3.在发表评论后,立即找出答案。墨菲定律感谢达林
chunk==0?FileMode.Create:FileMode.Append
如果plupload尝试了块0、1、1、2的效果(例如,可能它没有得到块
1
的响应并重试),会发生什么情况。假设plupload永远不会这样做(现在或将来),区分
Create
Append
实现了什么
Append
is:打开文件(如果存在)并查找到文件的末尾,或者创建一个新文件,只是想知道为什么会用相反的值声明两次“多个队列”?(打字?@Geovani Martinez:只是一个复制和粘贴拒绝:)除非图像大小非常小,否则它不会工作-因为,我猜,只有第一个区块会被保存,如果图像大于此值,它将无法正确保存。
控制器中不需要区块
!!怎么用?plupload将针对每个区块将区块发送到action。因此,每个区块都将覆盖上一个区块。我说的对吗?如果文件大于1mb,则需要分块。NET将抛出超出最大请求长度的
这是不正确的,测试一个比您的Plupload区块大小设置大的文件,您将看到每个区块的控制器方法多次