使用FileUpload的内容

时间:2013-05-31 15:40:44

标签: c# asp.net

我正在尝试将文件导入功能添加到管理网页,其中将从本地C:驱动器导入CSV文件

我刚刚意识到string filePath = Path.GetFileName(FileUpload1.FileName);实际上并不允许读取客户端路径,只提供文件名。

protected void btnImportData_Click(object sender, EventArgs e)
{
  List<CSVFile> entries = new List<CSVFile>();

  string filePath = Path.GetFileName(FileUpload1.FileName);
  using (TextFieldParser parser = new TextFieldParser(filePath))
  {

    //Other code
  }

}

目前,行TextFieldParser parser = new TextFieldParser(filePath)出错,因为我无法获得CSV的完整路径。

是否可以将FileUpload1的内容加载到变量parser中?我可以看到控件有内容但不确定如何或是否可能?

2 个答案:

答案 0 :(得分:2)

考虑到文件尚未存储在服务器上,因此没有路径。 FileName只是:文件名而不是完整路径。

如果您要求文件存在于文件系统上以便解析它,则需要先保存它。

答案 1 :(得分:1)

FileName属性只是浏览器发送的文件名,尚未物理存储在服务器上。为此,您需要先保存它:

string filePath = String.Format({0}{1}", System.IO.Path.GetTempPath(), FileUpload1.FileName); // Save to temp directory
FileUpload1.SaveAs(filePath);
using (TextFieldParser parser = new TextFieldParser(filePath))
{
  //...
}
File.Delete(filePath); // Delete the file if you're done with it

此外,如果TextFieldParser可以接收System.IO.Stream,您甚至不需要先将文件保存到磁盘:

using (TextFieldParser parser = new TextFieldParser(FileUpload1.FileContent)) // Read stream
{
  //...
}