我正在尝试将文件导入功能添加到管理网页,其中将从本地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
中?我可以看到控件有内容但不确定如何或是否可能?
答案 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
{
//...
}