@Pure.Krome的解决方案适用于具有静态值的情况,这些值不会随着用户输入数据而改变。我使用了该解决方案,直到遇到元素内容可能已更改的问题。因此,我需要一个解决方案,在上传开始之前仅修改multipart_params。
如果将multipart_params传递给Uploader()的构造函数,则使用$('#foo').val()使用具有该时间的id'foo'元素的值。如果元素'foo'是表单元素,则可能不是您想要的。
因此,这里是一种替代方法。对于构造函数,您可能需要传递以下参数:
var uploader = new plupload.Uploader({
multipart: true
});
在开始上传之前,您需要设置multipart_params。例如,您可能在页面上的某个位置有一个按钮。对于该按钮,您具有启动上传的JavaScript处理程序。包括设置multipart_params的结果处理程序可能如下所示:
$('#uploadfiles').click(function (e) {
uploader.settings.multipart_params = { param1: document.getElementById("id1").value, param2: document.getElementById("id2").value };
uploader.start();
e.preventDefault();
});
请注意,您可以将名称“param1”更改为更有意义的名称,例如“标题”。 您的输入元素可能还有比“id”更有意义的id。 在控制器端(我使用MVC 4),实现可能如下所示:
public ActionResult Upload(string name = "", int chunk = 0, int chunks = 0, string param1 = "", string param2 = "") {
}
以这个例子为例:如果你把参数名称从 'param1' 改成 'title',那么动作的参数名称也需要相应地从 'param1' 改成 'title'。最终的代码将如下所示,同时还显示了从哪里获取文件流:
public ActionResult Upload(string name = "", int chunk = 0, int chunks = 0, string title = "", string param2 = "") {
System.Web.HttpPostedFileBase fileUpload = Request.Files[0];
}