-2

uploadifyMVC3プロジェクトにfileuploadプラグインを使用しています。

コントローラへのアップロードファイルを使用しようとしています。

マルチファイルアップロードとシングルファイルアップロードを一緒に使用するにはどうすればよいですか?

IEnumerable<HttpPostedFileBase> files複数のファイルとHttpPostedFileBase files単一のファイルのアップロードに使用することを知っています。これらを組み合わせる方法。

私のプロジェクトでは、ユーザーは複数のファイルを選択することも、単一のファイルのみを選択してコントローラーにアップロードすることもできます。

したがって、IEnumerable<HttpPostedFileBase> filesコントローラーアクションで使用すると、単一のファイルを取得できず(ファイルがnull)、使用HttpPostedFileBase filesしても何も表示されない場合、ここではファイルは常にnullになります。

単一ファイルのアップロードを使用する方法。複数のファイルのアップロードを取得できますが、単一のファイルを取得することはできません。

この作品を手に入れる方法は?

これが私のコードです:

HTML

    <body>
    @using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
            {
              <div id="fileupload" style="display:none">
                <div style="clear: none;">
                    File to Upload:
                    <input type="file" name="file_upload" id="file_upload" style="padding-left: 50px;"/><hr />
                </div>
                <p style="text-align: right;">
                    <input type="submit" id="selectimage" value="Ok" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"/>
                    <input type="submit" id="cancelimage" value="Cancel" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" onclick="cancelupload();" />
                </p>
            </div>
            <input type="button" id="btnImg" />
            <div id="filecontent">
              Added Images:
             </div>
            }
    </body>
    <script>
$(function(){
    $('#file_upload').uploadify({
            'checkExisting': 'Content/uploadify/check-exists.php',
            'swf': '/Content/uploadify/uploadify.swf',
            'uploader': '/Home/Index',
            'auto': false,
            'buttonText': 'Browse',
            'fileTypeExts': '*.jpg;*.jpeg;*.png;*.gif;*.zip',
            'removeCompleted': false,
            'onSelect': function (file) {
                $("#selectimage").click(function () {
                    $("#file_upload-queue").appendTo("#filecontent");
                });
            }
        });
});
</script>

コントローラのアクション

public ActionResult Index(IEnumerable<HttpPostedFileBase> fileData)
        {
            foreach (var file in fileData)
                {
                    if (file.ContentLength > 0)
                    {
                        string currpath = Server.MapPath("~/Images/");

                        currpath = Path.Combine(Server.MapPath("~/Images/Admin"), file.FileName);

                        file.SaveAs(currpath);
                    }

                }
            return View();
        }

単一ファイルのアップロードと複数ファイルのアップロードを機能させるには、コントローラーのアクションで何を変更する必要がありますか?

アップデート

どちらIEnumerable<HttpPostedFileBase> fileDataも機能していませHttpPostedFileBase fileData

4

2 に答える 2

1

コントローラアクションは、アップロードされるファイルごとに複数回呼び出されます。しかし、アップロードフォームを非表示にしたようです(でdivに配置しましたdisplay:none)。また、Uploadifyを使用して実際にファイルをアップロードすることはありません。設定が完了し、メソッドauto: falseを使用してファイルのアップロードをトリガーすることはありません。uploadだから、あなたはどういうわけかフォームを送信していて、サーバー側で何かを取得することを期待していると思いますが、それはこのようには起こらないでしょう。

だから、物事をきれいにして単純化しましょう:

<div>
    <input type="file" name="file_upload" id="file_upload" />
</div>

<hr />

<div id="filecontent">
    Added Images:
</div>

<input type="button" id="upload" value="Upload selected files to the server" />

<script type="text/javascript" src="@Url.Content("~/Content/Uploadify/jquery.uploadify-3.1.min.js")"></script>
<script type="text/javascript">
    $('#file_upload').uploadify({
        'swf': '@Url.Content("~/Content/uploadify/uploadify.swf")',
        'uploader': '@Url.Action("index", "home")',
        'auto': false,
        'multu': true,
        'buttonText': 'Browse',
        'fileTypeExts': '*.jpg;*.jpeg;*.png;*.gif;*.zip',
        'removeCompleted': false,
        'onSelect': function (file) {
            $("#selectimage").click(function () {
                $("#file_upload-queue").appendTo("#filecontent");
            });
        }
    });

    $('#upload').click(function () {
        $('#file_upload').uploadify('upload', '*');
        return false;
    });
</script>

これで、コントローラーのアクションは次のようになります。

[HttpPost]
public ActionResult Index(HttpPostedFileBase fileData)
{
    if (fileData != null && file.ContentLength > 0)
    {
        var currpath = Path.Combine(
            Server.MapPath("~/Images/Admin"), 
            fileData.FileName
        );
        fileData.SaveAs(currpath);
    }
    return Json(new { success = true });
}
于 2012-12-27T06:51:53.860 に答える
0

プラグインを試してみてください:html5 + flash + silverligthで動作します:クライアントブラウザ。 http://des.delestesoft.com:8080/?go=2

于 2012-12-27T06:37:47.833 に答える