使用FileUpload Control获取文件的完整路径

Dha*_*raj 41 asp.net file-upload

我正在使用FileUpload控件的Web应用程序.我在我试图上传的完整文件路径'C:\ Mailid.xls'中有一个xls文件.

当我使用命令

FileUpload1.PostedFile.FileName 
Run Code Online (Sandbox Code Playgroud)

我无法从我的系统中获取完整的文件路径.但是,当我在另一个系统中使用上述命令时,它工作正常.

我也尝试了以下命令但没有成功:

   System.IO.Path.GetFullPath(FileUpload1.PostedFile.FileName);
   Path.GetFileName(FileUpload1.PostedFile.FileName);
   System.IO.Path.GetDirectoryName(FileUpload1.PostedFile.FileName).ToString();
   Convert.ToString(System.IO.Directory.GetParent(FileUpload1.PostedFile.FileName));
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得完整的路径?

Con*_*dev 29

这是目前真正的,"当你上传文件,浏览器将只发送源文件名,而不是完整路径" -它非常有意义,服务器有没有企业知道文件是否是在"C:\ WINDOWS \"或者" F:\ SOMEDIR\OTHERDIR\PERSONALINFO \".始终发送文件,这对于帮助用户"识别"内容以及可能询问文件扩展名以帮助确定文件类型都很有用.

但是我从经验中知道Internet Explorer肯定习惯(在旧版本中)发送整个路径.很难找到权威的确认(除了这个apache fileupload控件doco)

Internet Explorer提供上载文件的完整路径,而不仅仅是基本文件名

无论如何,您不应该使用也不希望任何"现代"浏览器发送完整路径.

  • 我还要补充一点,你永远不应该假设.FileName属性只会包含文件名而不包含任何其他内容.有时它可以包含完全quanlified路径,大多数情况下只包含文件名.这取决于客户端浏览器的年龄.在任何情况下,你应该总是包装Path.GetFileName(fileUpload.FileName),以保证它绝对是你的文件名;重新处理而不是路径.(Path实用程序类位于System.IO命名空间中). (10认同)
  • Internet Explorer 8已修复为仅在Internet区域中提供文件名,但在本地Intranet区域中,它仍会发送完整路径.给@Sunday Ironfoot +1以获取Path.GetFileName建议. (6认同)

elo*_*0ka 23

也许你误解了这种方式FileUpload.

上传文件时,它实际上是从客户端的计算机传输到托管应用程序的服务器.如果您正在开发应用程序,大多数情况下,客户端和服务器都是同一台计算机(您的计算机).但是,一旦部署了应用程序,就可能有任意数量的客户端连接到服务器,每个客户端上载一个不同的文件.

通常不需要知道客户端计算机上文件的完整路径 - 您通常希望对文件内容执行某些操作.你的例子看起来像ASP.NET C#,所以我猜你正在使用FileUpload控件.您可以通过读取原始流(FileUpload.PostedFile.InputStream)或首先FileUpload.PostedFile.SaveAs保存文件(),然后访问保存的文件来获取上载文件的内容.保存文件是您的责任,如果您希望在当前请求之后可以访问它 - 如果不这样做,ASP.NET会删除它.

还有一件事 - 不要忘记将enctype表单上的属性设置为"multipart/form-data".如果你不这样做,客户端的浏览器将不会发送文件,你会花很多时间想知道出了什么问题.


Eri*_*Law 9

从IE8开始,完整路径不再发送到Internet区域中的站点.

请参阅本文末尾的"文件上载控件"部分:http://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx进行讨论.


waq*_*med 8

出于安全原因,FileUpload绝不会为您提供完整路径.


小智 8

尝试

Server.MapPath(FileUpload1.FileName);
Run Code Online (Sandbox Code Playgroud)

编辑: 此答案描述了如何获取服务器上文件的路径.它没有描述如何获取客户端上文件的路径,这就是问题所在.这个问题的答案是"你不能",因为出于安全原因,现代浏览器不会告诉你客户端上的路径.

  • 这不行.假设应用程序根目录是C:\ MySource\MyProject \那么Server.MapPath("Mailid.xls")会给你C:\ MySource\MyProject\Mailid.xls而不是C:\ Mailid.xls,因为问题说是需要的. (18认同)
  • 为什么这标记为正确答案并有6个赞成票? (6认同)
  • 对不起,这实际上并没有解决原始问题. (2认同)
  • 这是错误的答案.Server.MapPath()返回应用程序虚拟目录路径. (2认同)

小智 8

Convert.ToString(FileUpload1.PostedFile.FileName);
Run Code Online (Sandbox Code Playgroud)