4

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

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

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

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

4

1 回答 1

4

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

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

服务器端部分:

您可能会将表单提交给 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

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

于 2013-05-20T20:45:38.357 回答