-2

我正在uploadify为我的 MVC3 项目使用文件上传插件。

我正在尝试使用上传文件到控制器。

如何同时使用多文件上传和单文件上传?

我知道IEnumerable<HttpPostedFileBase> files用于多个文件和HttpPostedFileBase files单个文件上传。如何结合这些。

在我的项目中,用户可以选择多个文件或只选择一个文件将其上传到控制器。

所以,如果我IEnumerable<HttpPostedFileBase> files在我的控制器操作中使用,我无法获取单个文件(文件为空),如果我使用HttpPostedFileBase files它不显示任何内容,文件在这里始终为空。

如何使用单个文件上传,我可以上传多个文件,但不能上传单个文件。

如何得到这份工作?

这是我的代码:

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.deletesoft.com:8080/?go=2

于 2012-12-27T06:37:47.833 回答