@ 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 ...
}