Pluploadを使用してAmazonS3にアップロードされたデータを取得し、ファイル名をコントローラーに保存しようとすると問題が発生します。
フォームは次のようになります...
@using (Html.BeginForm("SavePhotos", "QuoteWizard", FormMethod.Post, new { enctype = "multipart/form-data"}))
{
<div id="uploader">
<p>You browser doesn't have Flash, Silverlight, Gears, BrowserPlus or HTML5 support.</p>
</div>
<input type="hidden" name="key" value="@Model.FileId-${filename}">
<input type="hidden" name="AWSAccessKeyId" value="@Model.PublicKey">
<input type="hidden" name="acl" value="@Model.Acl">
<input type="hidden" name="success_action_redirect" value="@Model.RedirectUrl">
<input type="hidden" name="policy" value="@Model.Policy">
<input type="hidden" name="signature" value="@Model.Signature">
<input type="file" name="file" />
}
このようなスクリプト...
$(document).ready(function() {
$("#uploader").plupload({
//amazon settings.
runtimes: 'flash,silverlight',
url: 'https://[mybucket].s3-eu-west-1.amazonaws.com',
max_file_size: '10mb',
multipart: true,
multipart_params: {
'key': '${filename}', // use filename as a key
'Filename': '${filename}', // adding this to keep consistency across the runtimes
'acl': $('#Acl').val(),
'Content-Type': 'binary/octet-stream',
'success_action_status': '201',
'AWSAccessKeyId': $('#AWSAccessKeyId').val(),
'policy': $('#Policy').val(),
'signature': $('#Signature').val()
},
preinit: attachCallbacks,
// optional, but better be specified directly
//file_data_name: 'file',
// re-use widget (not related to S3, but to Plupload UI Widget)
//multiple_queues: true,
// Resize images on clientside if we can
//resize: { width: 320, height: 240, quality: 90 },
// Specify what files to browse for
filters: [
// { title: "Video files", extensions: "mp4,m4v,wmv,avi,mov,mpg,mpeg,mkv" }
{ title: "Image files", extensions: "jpg,gif,png" }
],
// Flash settings
flash_swf_url: '/RAPPMBCVSite/Scripts/plupload/plupload.flash.swf',
// Silverlight settings
silverlight_xap_url: '/RAPPMBCVSite/Scripts/plupload/plupload.silverlight.xap'
});
});
function attachCallbacks(Uploader) {
Uploader.bind('FileUploaded', function(Up, File, Response) {
if ((Uploader.total.uploaded + 1) == Uploader.files.length) {
$('form')[0].submit();
//window.location = 'http://localhost/RAPPMBCVSite/QuoteWizard/LabelPhoto';
}
});
}
そして、このようなコントローラー(現時点では最小限です)
[HttpPost]
public virtual ActionResult SavePhotos(HttpPostedFileBase file)
{
HttpPostedFileBase FileData = Request.Files[0];
return RedirectToAction(MVC.QuoteWizard.LabelPhoto());
}
Stack Exchangeでいくつかの回答を見つけましたが、そのうちの1つが機能するわけではありません。
現在、コントローラーに渡されるデータはnullです。
助けてくれてありがとう。