我有一个ASP FileUpload控件,我正在上传:
C:\Documents and Settings\abpa\Desktop\TTPublisher\apache-tomcat-6.0.26\webapps\ttpub\WEB-INF\classes\org\gtfs\tmp\GTFS_Rail\routes.txt
使用以下代码获取整个字符串的C#代码是什么:
var pathOfCsvFile = Server.MapPath(ImportRoutes.FileName);
var adapter = new GenericParsing.GenericParserAdapter(pathOfCsvFile);
DataTable data = adapter.GetDataTable();
我知道Server.MapPath需要改变。
更新:
使用System.IO.Path.GetFullPath
给出了以下输出:
pathOfCsvFile = "C:\\Program Files\\Common Files\\Microsoft Shared\\DevServer\\10.0\\routes.txt"
答案 0 :(得分:7)
您正在混淆客户端和服务器行为,这在本地测试时很容易实现。您遇到的问题是FileUploadControl(以及一般的HTML文件上传)专门设计为不为您提供文件的完整路径。这将是一个隐私泄露。 旨在为您提供的是自己上传的文件的二进制数据。具体来说,您应该查询FileUploadControl上的属性:FileBytes或FileContent。
为了进一步澄清问题,如果浏览器用户实际上在与Web服务器不同的机器上(通常情况下)会发生什么? 服务器上的客户端计算机上的文件的完整路径有什么用处?
答案 1 :(得分:0)
Server.MapPath将返回应用程序根目录中或下面的文件的物理路径。如果您列出的路径位于应用程序根目录之外,则Server.MapPath将不起作用。
您可以将虚拟目录映射到要用于保存文件上载的文件夹,然后可以使用Server.MapPath发现该文件夹。