【问题标题】:IFormFile not being populated by dropzone uploadMultiple requestdropzone uploadMultiple 请求未填充 IFormFile
【发布时间】:2018-03-28 08:58:42
【问题描述】:

我遇到的问题是 IFormFile 列表没有填充给定文件,但是当我调用 HttpContext.Request.Form.Files;然后我可以访问这些文件。我更喜欢使用 IFormFile,因为它似乎是新的 Dotnet core 2.0 做事方式。

我有以下请求负载:

具有以下请求标头:

和 Razor 页面处理程序:

public async Task<ActionResult> OnPostSend(ConditionResponse conditionResponse)
    {
        var files = HttpContext.Request.Form.Files;
    }

条件响应模型:

public class ConditionResponse
{
    public List<string> Plots { get; set; }

    public string Comments { get; set; }

    public List<IFormFile> Files { get; set; }
}

【问题讨论】:

  • 嗨,我也有同样的问题。你能把你的整个代码贴在这里吗
  • 您不需要完整的代码。下面的答案显示了如何在 JS 中只需要使用 paramName 选项。确保将 IFormFile 命名为与从 myParamName 返回的字符串相同。

标签: c# http file-upload .net-core dropzone.js


【解决方案1】:

查看来自 html5 多文件上传的请求后,我注意到该请求没有将索引添加到文件名 (files[n])。 Dropzone.js 这样做是为了解决这个问题。如果您将 paramName 选项添加到 Dropzone JS 配置并让它调用返回文件的方法,您将获得与 html5 多文件上传相同的行为。

function myParamName() {
                return "files";
            }

 Dropzone.options.myDropzone = {
                uploadMultiple: true,
                paramName: myParamName,
}

【讨论】:

  • 效果很好!谢谢你。你能解释一下为什么会这样吗?你是怎么发现的?
  • 感谢您的回答,我已经尝试让它工作一段时间了!这真的应该添加到 Dropzone 文档中
  • @m.brookson 没问题,如果答案对您有用,请您投赞成票
  • @m.brookson 没问题,如果答案对你有用,如果你认为这个问题有用,那么你也可以投票吗,谢谢
【解决方案2】:

接受的答案非常有效,我不知道为什么以及如何,但它有效。我只是想摆脱那个附加功能,即我们可以这样使用它:

 Dropzone.options.myDropzone = {
                uploadMultiple: true,
                paramName: () => "files",
}

或者如果旧浏览器也被定位:

 Dropzone.options.myDropzone = {
                uploadMultiple: true,
                paramName: function () { "files" },
}

【讨论】:

  • 不错的建议。值得一提的是,这仅适用于 es6 兼容的浏览器版本。
  • @LiverpoolOwen,你有什么解释为什么会这样吗?
  • 当 DropzoneJs 发送请求时,它会为每个文件添加索引,例如 files[0]、files[1]、files[2],其中 IFormFile 期望文件具有完全相同的名称,例如文件, 文件, 文件
  • @LiverpoolOwen,是的,我的意思是为什么传递对函数的引用有效?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 2015-08-16
相关资源
最近更新 更多