【问题标题】:Dropzone FileUploadDropzone文件上传
【发布时间】:2020-10-01 17:18:19
【问题描述】:

亲爱的朋友们,我目前正在为用户创建一个管理面板,他们可以轻松地发布他们的文章。我还想在我的表单中添加一个小文件上传器,但遗憾的是我在 POST 方法中遇到了 DROPZONEJS.JS 文件的一些问题。主要问题是我无法提供项目本地文件的 URL,以便下载到网站将访问这些文件的文件,以便使用当前文章的 ID 发布它们。如果有不明白的地方请告诉我。

@{
    ViewBag.Title = "Uppy";
}
@{
    Layout = "~/Views/Shared/_AdminLayout.cshtml";
}
    <div class="content d-flex flex-column flex-column-fluid" id="kt_content">
        <!--begin::Entry-->
        <div class="d-flex flex-column-fluid">
            <!--begin::Container-->
            <div class="container">
                <!--begin::Card-->
                <div class="card card-custom gutter-b">
                    <div class="card-header">
                        <div class="card-title">
                            <h3 class="card-label">File Upload</h3>
                        </div>
                    </div>
                    <!--begin::Form-->
                    <form>
                        <div class="card-body">
                            <div class="form-group row">
                                <label class="col-form-label col-lg-3 col-sm-12 text-lg-right">Multiple File Upload</label>
                                <div class="col-lg-4 col-md-9 col-sm-12">
                                    <div class="dropzone dropzone-default dropzone-primary" id="kt_dropzone_2">
                                        <div class="dropzone-msg dz-message needsclick">
                                            <h3 class="dropzone-msg-title">Drop files here or click to upload.</h3>
                                            <span class="dropzone-msg-desc">Upload up to 10 files</span>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label class="col-form-label col-lg-3 col-sm-12 text-lg-right">File Type Validation</label>
                                <div class="col-lg-4 col-md-9 col-sm-12">
                                    <div class="dropzone dropzone-default dropzone-success" id="kt_dropzone_3">
                                        <div class="dropzone-msg dz-message needsclick">
                                            <h3 class="dropzone-msg-title">Drop files here or click to upload.</h3>
                                            <span class="dropzone-msg-desc">Only image, pdf and psd files are allowed for upload</span>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        @using (Html.BeginForm("Uppy",
                            "FileUpload",
                            FormMethod.Post,
                            new { enctype = "multipart/form-data" })) //multipart/form-data gives functionlity to inputes (search at web);
                        {
                            <div class="card-footer">
                                <div class="row">
                                    <div class="col-lg-3"></div>
                                    <div class="col-lg-4">
                                        <input type="submit" value="Submit" class="btn btn-light-primary mr-2" />
                                        <button type="reset" class="btn btn-primary">Cancel</button>
                                    </div>
                                    
                                </div>
                            </div>
                          }
                        </form>
                    <!--end::Form-->
                </div>
                <!--end::Card-->
                <!--end::Row-->
            </div>
            <!--end::Container-->
        </div>
        <!--end::Entry-->
    </div>
    <!--end::Content-->
  

顺便说一句,我自己的上传代码工作正常,并且还将选择的文件发送到我在控制器中编写的 url 位置。

    <label for="file">Upload File:</label>
    <input type="file" name="file" id="file" class="btn-hover-bg-success" />
    <br>
    <br>
    <input type="submit" value="Upload Image" />
    <br>
    <br>
    @ViewBag.Message

这是我的 FileUploadController:

 [HttpPost]
    public ActionResult Uppy(HttpPostedFileBase file)
    {
        ADAPTIVE_TESTEntities ent = new ADAPTIVE_TESTEntities();
        Adaptive.News.Models.NEWS news = new Adaptive.News.Models.NEWS();
        if (file != null && file.ContentLength > 0)
            try
            {
                var path = Path.Combine(Server.MapPath("~/Content/images"),
                                           Path.GetFileName(file.FileName));
                file.SaveAs(path);
                news.PICTUREPATH = path;
                ent.NEWS.Add(news);
                ent.SaveChanges();
                ViewBag.Message = "File uploaded successfully";
            }
            catch (Exception ex)
            {
                ViewBag.Message = "ERROR: " + ex.Message.ToString();
            }
        else
        {
            ViewBag.Message = "You have not specified a file.";
        }
        return View();
    }

【问题讨论】:

  • 文件上传控件在&lt;input type='file'&gt;中的位置。

标签: c# asp.net bootstrap-4 dropzone.js


【解决方案1】:

对我来说,你的问题到底是什么以及在哪里并不明显。有问题是什么意思。你的问题是 Dropzone.JS 还是 C#?无论如何,我稍微检查了你的代码,并知道你的问题可能是什么。

首先:您有 2 个 DIV 容器,用作 Dropzone 元素,为它们分配 css 类“dropzone”。此外,您还可以使用 ASP.Net HTML-Helper 生成一个 FORM 元素。

默认情况下,您有 2 个使用 Dropzone 的选项。

  1. 通过将 css 类“dropzone”分配给任何 HTML 元素的声明式实例化。 Dropzone 自动发现所有具有 class="dropzone" 的 DOM 元素并实例化它们。

  2. 以编程方式实例化:通过将容器元素的 id 和 THE OPTIONS CONTAINING POST URL 传递给 Dropzone 构造函数来实例化 Dropzone。

声明性拖放区

你必须注意这个细节:如果你使用FORM元素作为Dropzone容器元素,Dropzone使用FORM元素的“action”属性作为post URL。但是如果你使用 DIV 元素作为容器,那么您很可能会遇到 JavaScript 错误。因为 DIV 元素通常没有“动作”属性。如果您使用 DIV 作为 Dropzone 容器(并且在您的代码中使用了 2 次),您将收到以下 JavaScript 错误:

dropzone.js:1027 Uncaught Error: No URL provided.
    at new Dropzone (dropzone.js:1027)
    at dropzone.js:2907
    at Function.Dropzone.discover (dropzone.js:2919)
    at Dropzone._autoDiscoverFunction (dropzone.js:3491)
    at HTMLDocument.init (dropzone.js:3456)

在这种情况下,您有两种解决问题的方法:

  1. 使用 FORM 元素代替 DIV 作为 Dropzone 容器。
  2. 将 action="/your/post/url" 添加到您的 DIV 元素,用作 Dropzone 容器。

我更喜欢第一个选项。因为DIV元素具有action属性并不常见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2014-02-09
    相关资源
    最近更新 更多