2

我正在尝试将文件上传到 c# 中的处理程序,但似乎文件没有被上传。调用Request.Files["fileNameHere"]返回 null

我的html代码:

<form id="importManagerForm" action="../ImportManager.ashx" method="POST">
   <input name="selectedFile" id="selectedFile" type="file" /> 
   <input type="submit" value="submit"/>
</form>

ashx 处理程序中的代码是:

public void ProcessRequest(HttpContext context)
{
  var importFile = context.Request.Files["selectedFile"]; //This part returns null
  var fileName = new Guid().ToString() + ".csv";
  importFile.SaveAs(fileName);
}

知道有什么问题吗?

更新:

快速调试context.Request.Files显示文件计数为 0。

4

4 回答 4

3

看起来您缺少enctype="multipart/form-data"表单上的属性。

于 2013-02-19T09:22:07.883 回答
1

您正在使用 html 表单控件而不是 asp.net 表单服务器控件。

您将需要设置enctype

<form id="importManagerForm" enctype="multipart/form-data" 
      action="../ImportManager.ashx" method="POST">

只有这样您才能接收文件

于 2013-02-19T09:22:49.440 回答
1

每当我们有要以 html 形式上传的文件时,或者每当我们在表单中使用标签时,我们都必须通知浏览器该请求包含二进制数据。因此要实现这一点,您必须向标签添加enctype属性。

enctype="multipart/form-data" 应该添加到表单中。

它表示在发送之前没有对字符进行编码。即它确保在将数据发送到服务器之前没有对字符进行编码。

于 2013-02-19T09:31:43.397 回答
0

浏览器可能是原因。如果您使用的是 IE,文件将位于 中Request.Files,但在 Chrome 和 FF 中,文件位于Request.QueryString["qqfile"] 以下示例代码

于 2013-02-19T09:26:02.313 回答