【问题标题】:Get the absolute path of a file to be uploaded获取要上传的文件的绝对路径
【发布时间】:2010-11-20 20:11:37
【问题描述】:

我正在使用名为 theFile (ASP.NET) 的简单 FileUpload 控件上传文件。我正在尝试获取文件的绝对路径,但是thefile.PostedFile.FileNamethefile.FileName 完全相同,只是文件名,没有路径!我不能使用 Server.MapPath,因为我将把这个文件保存在不同的服务器上(通过 web 服务通过字节数组传输)。

它在这一行中断:

Dim fStream As New FileStream(thefile.FileName, FileMode.Open, FileAccess.Read)

因为它正在获取文件名并将其映射到我的 VS 的相对路径!我需要绝对路径...

【问题讨论】:

  • 您使用的是哪个版本的 .net 框架?
  • 基本上,我想知道这个人要上传的文件的路径是什么,所以我可以拿它并从中创建一个文件流
  • 具有 enctype=multipart/form-data 和 post 方法的 HTML 表单负责上传文件内容(不是文件)。

标签: asp.net file-upload absolute-path


【解决方案1】:

通过 HTTP 上传的文件永远不会包含远程(客户端)计算机上的完整路径 - 它可能会泄露有关其目录结构的信息,因此被视为安全风险。另外,它有什么用?如果有人通过 Internet 向您上传文件,您为什么要尝试在本地(asp.net 服务器)机器上打开文件流到他们机器上存在的路径?

上传的文件实际上是作为请求的一部分以字节流的形式通过的。您需要访问控件的FileBytes 属性来获取文件,或者调用SaveAs() 方法将其保存到服务器。在您的情况下,您可能只是获取字节并将它们发送到您需要进行的网络服务调用。

【讨论】:

  • 如何在不知道要获取的文件路径的情况下创建文件流?
  • 我觉得你有点困惑。上传的文件作为 HTTP 请求的一部分以字节流的形式存在。在您将其保存到磁盘之前,此字节流与文件系统上的文件之间没有任何关系。
  • @Jason:正如哈迪所说,使用 FileContent 属性来使用上传文件的底层流。
  • 是的...我们发布的链接中都包含了这些内容...看起来我们都链接了同一个页面。
【解决方案2】:

(通过网络服务通过字节数组传输)。

既然您当前需要文件字节数组,为什么不通过 File.FileBytes 属性访问文件的字节数组呢?

这里是对 FileUpload Web 控件的 FileBytes 属性的引用:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.filebytes.aspx

如果您想直接访问 Stream 对象,您可以利用 FileContent 属性。这是对 FileUpload Web 控件的 FileContent 属性的引用:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.filecontent.aspx

【讨论】:

    猜你喜欢
    • 2016-11-19
    • 2010-09-18
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2013-04-11
    相关资源
    最近更新 更多