javascript - DropZone.js 使用 ASP.Net MVC 上传多个文件

标签 javascript asp.net asp.net-mvc asp.net-mvc-4 dropzone.js

我正在使用 javascript 库 DropZone.js但上传多个文件在 ASP.Net MVC 中无法正常工作。

有效的方法是当我设置 Dropzone 选项“autoProcessQueue: true”并且 MVC Controller 参数名称“inputFiles”可以看到输入文件确实成功上传到服务器。然而,这意味着图像的上传会自动发生,用户没有机会单击表单提交按钮。 (我认为这就是为什么他们称之为 DROPZone - 自动上传)

无论如何,我想让用户在上传之前单击提交按钮,因此我设置了选项“autoProcessQueue: false”,但在表单提交上, Controller 上的参数名称“inputFiles”始终返回 null。

        <form action="/home" method="post" enctype="multipart/form-data" class="dropzone dz-clickable form-horizontal form-bordered" id="dropzoneForm">
            <div class="form-group form-actions">
                <div class="col-md-9 col-md-offset-4">
                    <button type="submit" class="btn btn-sm btn-primary"><i class="fa fa-floppy-o"></i> Upload</button>
                </div>
            </div>
        </form>

<script>
    $(function () {
        Dropzone.options.dropzoneForm = {
            paramName: "inputFiles", // The name that will be used to transfer the file
            autoProcessQueue: true,
            uploadMultiple: false,
            parallelUploads: 100,
            accept: function (file, done) {
                done();
            }
        };
    });
</script>



[HttpPost]
    public ActionResult Index(IEnumerable<HttpPostedFileBase> inputFiles)
    {
        string fName = "";

        foreach (HttpPostedFileBase fileName in inputFiles)
        {
            HttpPostedFileBase file = fileName;
            //Save file content goes here
            fName = file.FileName;
            if (file != null && file.ContentLength > 0)
            {

                var originalDirectory = new DirectoryInfo(string.Format("{0}Images\\WallImages", Server.MapPath(@"\")));

                string pathString = System.IO.Path.Combine(originalDirectory.ToString(), "imagepath");

                var fileName1 = Path.GetFileName(file.FileName);

                bool isExists = System.IO.Directory.Exists(pathString);

                if (!isExists)
                    System.IO.Directory.CreateDirectory(pathString);

                var path = string.Format("{0}\\{1}", pathString, file.FileName);
                file.SaveAs(path);
            }

        } 

        return View();
    }

有人尝试过使用 DropZone.js 吗?

最佳答案

您可以使用以下命令,而不是在操作中使用参数:

[HttpPost]
public ActionResult Index()
{
    string fName = "";

    foreach (var fileName in Request.Files.AllKeys)
    {
        var file = Request.Files[fileName];
        //Save file content goes here
        fName = file.FileName;
        if (file != null && file.ContentLength > 0)
        {

            var originalDirectory = new DirectoryInfo(string.Format("{0}Images\\WallImages", Server.MapPath(@"\")));

            string pathString = System.IO.Path.Combine(originalDirectory.ToString(), "imagepath");

            var fileName1 = Path.GetFileName(file.FileName);

            bool isExists = System.IO.Directory.Exists(pathString);

            if (!isExists)
                System.IO.Directory.CreateDirectory(pathString);

            var path = string.Format("{0}\\{1}", pathString, file.FileName);
            file.SaveAs(path);
        }

    } 

    return View();
}

等等...不确定它是否有效..无法尝试,但想法是usign

Request.Files

希望这有帮助!

关于javascript - DropZone.js 使用 ASP.Net MVC 上传多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31079667/

相关文章:

javascript - 从嵌套数组到对象数组

javascript - ES6 扩展运算符在对象上的应用是标准的 ECMAScript 规范吗?

javascript - CSS3 转换不适用于 DIV 元素

javascript - 在 Chromecast Custom Receiver 上显示图像

c# - 加载页面时将 <li> 类更改为事件

c# - MVC 应用程序中缺少表单验证

c# - 为什么要创建外键约束?

ASP.NET - DataSourceID 和 DataSource 有什么区别?

asp.net-mvc - 具有热重载功能的 ASP.NET Core 6.0 : Error when manipulating ViewBag

asp.net-mvc - Identity 2.0 使用 token 重置短信密码