使用多个单个文件上传

时间:2012-12-27 06:09:02

标签: asp.net-mvc-3 file-upload uploadify httppostedfilebase

我正在为我的MVC3项目使用uploadify fileupload插件。

我正在尝试将上传文件用于控制器。

如何一起使用多文件上传和单个文件上传?

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

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

所以,如果我在我的控制器操作中使用IEnumerable<HttpPostedFileBase> files,我将无法获取单个文件(文件为空),如果我使用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> fileDataHttpPostedFileBase fileData都没有工作

2 个答案:

答案 0 :(得分:1)

对于要上载的每个文件,将多次调用控制器操作。但是您似乎隐藏了上传表单(您将其放在带有display:none的div中)。此外,您永远不会使用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 });
}

答案 1 :(得分:0)

尝试它插件:使用html5 + flash + silverlight根据:客户端浏览器。 http://des.delestesoft.com:8080/?go=2