3

我有一个 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"

4

2 回答 2

7

您正在混淆客户端和服务器的行为,这在本地测试时很容易做到。您遇到的问题是 FileUploadControl(以及一般的 HTML 文件上传)专门设计为为您提供文件的完整路径。那将是对隐私的侵犯。它旨在为您提供的是自己上传的文件的二进制数据。具体来说,您应该查询 FileUploadControl 上的属性:FileBytes 或 FileContent。

只是为了进一步澄清这个问题,如果浏览器用户实际上与 Web 服务器在物理上不同的机器上会发生什么(通常情况下)?客户端计算机上文件的完整路径对服务器上的您有什么好处?

于 2010-08-26T15:45:25.580 回答
0

Server.MapPath 将返回应用程序根目录中或之下的文件的物理路径。如果您列出的该路径位于应用程序根目录之外,则 Server.MapPath 将不起作用。

您可以将虚拟目录映射到要用于保存文件上传的文件夹,然后您可以使用 Server.MapPath 发现该文件夹。

于 2010-08-26T15:46:12.227 回答