Решение @Pure.Krome работает, если у вас есть статические значения, которые не меняются, когда пользователи вводят данные на страницу. Я использовал это решение, пока не столкнулся с проблемой изменения содержимого элементов. Поэтому мне нужно решение, которое будет изменять multipart_params только непосредственно перед началом загрузки.
Если multipart_params передаются конструктору Uploader(), то при использовании $('#foo').val()
используется значение элемента с идентификатором '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» на что-то более значимое, например. 'Заголовок'. Вероятно, у вас также будет идентификатор, более значимый, чем «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 ...
}
person
Manfred
schedule
01.10.2012