0

遇到流作家的问题

我有一个网页,在登录视图中有一个 FileUploader 来访问它我正在使用

var fileuploader = (FileUpload)LoginView.FindControl("FileUploader");
string filepath =  System.IO.Path.GetFullPath(fileuploader.FileName.ToString());

然后我将该数据传递给我的流式阅读器(在不同的类中)

 using (StreamReader reader = File.OpenText(filename))

它传入的文件路径是 C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\sample.txt

我从 C:\fasta\sample.txt 中选择它

我看过一些关于这个的帖子,但不涉及 asp.net 应用程序。谢谢!

4

3 回答 3

2

FileUpload类允许客户端上传/选择文件。所以你能得到的只是一个clientPath。这样的路径对你来说是不需要的!因此,您可以做的是使用该fileUpload.FileName属性并将其与其他路径相结合。

var fileuploader = (FileUpload)LoginView.FindControl("FileUploader");
string filepath =  Path.Combine(Server.MapPath("."), fileuploader.FileName);
fileuploader.SaveAs(filePath); // will save the selected file on your server

Server.MapPath(..)将虚拟路径(在服务器上)映射到服务器上的真实路径。调用它"."意味着此调用将返回您的 webApplication 根目录。无论如何,在将文件上传到哪里时,您应该非常小心!在最坏的情况下,有人上传了一个潜在的危险文件(例如 .aspx 扩展名)并且可以在您的服务器上执行代码!

此外,没有必要也没有办法直接从服务器访问客户端的文件。您只能在 HTTP 请求中获取这些项目。所以selectedFile 已经在 Request 中了,你可以直接把它保存到你的服务器硬盘上!

于 2012-09-06T18:23:35.150 回答
1

我建议在 FileUpload 控件上使用 SaveAs 方法 (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.saveas.aspx)。

请记住,该文件实际上是从网站上传给您的,并且您永远不会真正想关心它在客户端计算机上的位置(恰好服务器和客户端对您来说是同一台计算机) . 如果您从另一台计算机将文件上传到站点,则 Web 服务器将永远无法访问客户端路径上的资源。FileUpload 控件为您准备了文件,因此只需将文件放在您想要的位置,然后您就可以访问它并使用它做任何您想做的事情。

Cliffs:即使您获得了资源的客户端路径,您的服务器也无法对其执行任何操作,因为它位于您的服务器无权访问的另一台机器上。

于 2012-09-06T18:28:51.583 回答
1

如果要上传文件:

.aspx

...
<asp:FileUpLoad id="FileUpLoad1" runat="server" />
...

代码隐藏

...
if (FileUpLoad1.HasFile)
{
    FileUpLoad1.SaveAs(@"C:\temp\" + FileUpLoad1.FileName);
}
else
{
   // No file uploaded
}
...

如果您想要文件路径,客户端在浏览器控件中设置的路径:

你不能。出于安全目的,浏览器永远不会发布完整文件的路径。

于 2012-09-06T18:42:16.910 回答