Using plupload with MVC3

前端 未结 2 603
忘了有多久
忘了有多久 2020-12-30 11:59

So, I\'ve implemented plupload using flash runtime in MVC3.

It works perfectly, in the sense that it uploads using the correction Action and runs it all. However, I\

相关标签:
2条回答
  • 2020-12-30 12:33

    Look here:

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

    And in Controller:

    [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!";
           }
    

    That's all...No chunk is needed in Controller...

    0 讨论(0)
  • 2020-12-30 12:46

    The following has worked for me:

    [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 Json(new { message = "chunk uploaded", name = name });
    }
    

    and on the client:

    $('#uploader').pluploadQueue({
        runtimes: 'html5,flash',
        url: '@Url.Action("Upload")',
        max_file_size: '5mb',
        chunk_size: '1mb',
        unique_names: true,
        multiple_queues: false,
        preinit: function (uploader) {
            uploader.bind('FileUploaded', function (up, file, data) {
                // here file will contain interesting properties like 
                // id, loaded, name, percent, size, status, target_name, ...
                // data.response will contain the server response
            });
        }
    });
    

    As far as the bonus question is concerned I am willing to answer it by don't use sessions, as they don't scale well, but because I know that you probably won't like this answer you have the possibility to pass a session id in the request using the multipart_params:

    multipart_params: {
        ASPSESSID: '@Session.SessionID'
    },
    

    and then on the server perform some hacks to create the proper session.

    0 讨论(0)
提交回复
热议问题