@Pure.Krome 的解决方案适用于用户在页面中输入数据时不会更改的静态值。我使用该解决方案,直到遇到元素内容可能已更改的问题。因此,我需要一个仅在上传开始之前修改 multipart_params 的解决方案。
如果将 multipart_params 传递给 Uploader() 的构造函数,则 using$('#foo').val()
使用当时具有 id 'foo' 的元素的值。如果元素 'foo' 是一个表单元素,那么这可能不是您想要的。
因此,这里有一个替代方案。对于构造函数,您可能需要传递以下参数:
var uploader = new plupload.Uploader({
// other params
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”更改为更有意义的名称,例如“Title”。对于输入元素,您可能还会有一个比“id”更有意义的 id。在控制器端(我使用的是 MVC 4),实现可能类似于:
public ActionResult Upload(string name = "", int chunk = 0, int chunks = 0, string param1 = "", string param2 = "") {
// ... your code here ...
}
继续示例:如果您将参数名称从“param1”更改为“title”,那么当然操作的参数名称也需要相应地从“param1”更改为“title”。生成的代码,还显示了您从何处获取文件流的外观,如下所示:
public ActionResult Upload(string name = "", int chunk = 0, int chunks = 0, string title = "", string param2 = "") {
// ... your code here ...
System.Web.HttpPostedFileBase fileUpload = Request.Files[0];
// ... and more of your code here ...
}