Using plupload with MVC3

前端 未结 2 604
忘了有多久
忘了有多久 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: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.

提交回复
热议问题