【问题标题】:How to Upload Multiple Files Along with Other Form Fields, ASP.NET MVC如何上传多个文件以及其他表单字段,ASP.NET MVC
【发布时间】:2013-05-20 20:38:02
【问题描述】:

所以我在一个页面上有一个表单。有几个文本输入字段等。现在还有一个 jQuery 文件上传控件,您可以在其中选择多个文件。我现在遇到的问题是我要求用户首先上传文件(使用 jQuery 控件),然后我将这些文件保存在 Session 状态,直到常规表单发布其余的表单字段。然后我从 Session 中提取之前上传的文件并做我需要做的事情。

所以基本上填写表格需要两个单独的 POST 操作返回到服务器。文件,然后是剩余的表单域。

我认为必须有更好的方法让用户选择他/她的文件但在用户提交主表单以发布所有其他字段之前不发布任何内容。我已经阅读了该网站上的几篇文章,但我找不到解决这个特定问题的文章。

非常感谢任何建议/帮助。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4


    【解决方案1】:

    我相信您可以使用Uploadify 做到这一点。您需要查看两个选项。首先,设置auto to false 以防止选择的文件立即被加载。其次,使用formdata option 将您的其他表单字段与有效负载一起发送。

    当用户提交表单时,您将调用upload method,上传队列中的每个文件并一次性发送所有表单数据。

    服务器端部分:

    您可能会将表单提交到 ASPX 文件或 ASHX 处理程序。我更喜欢使用 ASHX 处理程序,因为它们更轻。两者都允许您访问HttpContextHttpRequest 对象。首先,您需要检查context.Request.Files.Count 以确保文件已发布:

    if (context.Request.Files.Count > 0) // We have files uploaded
    {
       var file = context.Request.Files[0]; // First file, but there could be others
       // You can call file.SaveAs() to save the file, or file.InputString to access a stream
    }
    

    获取其他表单域应该同样简单:

    var formfield = context.Request["MyFormField"]; // Some form field
    

    您还可以将结果写回客户端,例如任何结果错误的 JSON 编码描述:

    context.Response.Write(response); // Anything you write here gets passed in to onUploadSuccess
    

    我认为这应该让你开始吧!

    【讨论】:

    • 这个答案只是一个问题。我使用uploadify来处理大批量的文件,它是一个很棒的工具。非常灵活且异步,因此您可以在文件上传时在后台工作。它还提供了很好的进度指标。绝对推荐。
    • 我只是对如何使用该服务器端感到有些困惑。我有一个动作方法,这是我要发帖的地方。我看不到我是如何同时获取普通表单字段(文本框字段等)以及获取文件数据的。我浏览了 Uploadify 页面上的示例,但我想我只是没有“明白”。有人可以发布一个链接到我如何同时处理文件和表单数据的一些伪代码示例吗?另外,我很欣赏对此事的回应。
    • @nDev - 我添加了一些服务器端信息。不幸的是,Uploadify 并没有太多关于 .NET 的文档,但您需要的一切都在某处HttpRequest 对象中。
    • 好的,很好。今晚我回家时我会试一试的。感谢您的帮助。
    猜你喜欢
    • 2018-12-01
    • 1970-01-01
    • 2017-11-06
    • 2011-07-06
    • 1970-01-01
    • 2015-06-04
    • 2014-02-04
    • 1970-01-01
    相关资源
    最近更新 更多