1

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です。

助けてくれてありがとう。

4

0 に答える 0