从文件 HTML 输入后面的代码中获取完整的文件路径
Posted
技术标签:
【中文标题】从文件 HTML 输入后面的代码中获取完整的文件路径【英文标题】:Getting full file path from code behind from file HTML input 【发布时间】:2011-05-12 10:39:16 【问题描述】:我使用 文件 HTML 输入,而不是 FileUpload Web Control。别问为什么,我只需要!
HTML:
<input type="file" id="image1" class="listUploadAdd" name="ImageAdd1" />
背后的代码:
Dim ImageAdd1 As String = Request.Form("ImageAdd1").ToString()
我从“C:/Orange.jpg”浏览到上传,代码背后的结果只是图像名称“Orange.jpg”,而不是获取所需的完整“C:/Orange.jpg”从本地驱动器上传文件。
从后面的代码中捕获完整图像路径以上传到服务器的最佳方法是什么?
谢谢。
【问题讨论】:
【参考方案1】:您可以在输入元素中添加runat="server"
吗? :) 然后很容易将文件存储在您的服务器上
Request.Files("File1").SaveAs("c:\somedir\yourfile.txt")
如果你想要原始文件名和路径,试试这个:
Dim filename As string = Request.Files("File1").FileName
要在不使用runat="server"
属性的情况下下载文件,您可以这样做:
Dim file = Request.Files("File1")
Dim buf(file.ContentLength) As Byte
file.InputStream.Read(buf, 0, file.ContentLength)
IO.File.WriteAllBytes("C:\somedir\yourfile.txt", buf)
但是你必须在html页面的form元素上设置enctype
:
<form id="yourform" runat="server" enctype="multipart/form-data">
【讨论】:
不确定我做错了什么。我收到此错误“对象引用未设置为对象的实例”。对于“Dim filename As String = Request.Files("image1").FileName”或“Dim filename As String = Request.Files("ImageAdd1").FileName”有相同的消息。我也放置了与您提到的相同的 Form 属性。真的很奇怪。 但正如@Michael Shimmins 指出的那样,您真的不应该关心文件在客户端计算机上的位置。重要的是您选择将其存储在服务器上的哪个位置。 您在尝试访问file
时可能会遇到空引用异常。 Request.Files("File1")
可能返回 null。
搞定了。结果我不应该将“runat=server”用于。谢谢。【参考方案2】:
我从“C:/Orange.jpg”浏览到上传,代码背后的结果只是图像名称“Orange.jpg”,而不是获取所需的完整“C:/Orange.jpg”从本地驱动器上传文件。
您将无法从客户端计算机上提取文件。当您开发程序时,客户端和服务器是同一台机器,但当您部署它时,服务器和客户端将是不同的机器。当后面的代码执行时(在服务器上),如果您尝试打开 C:\Orange.jpg,您将尝试从服务器的硬盘上打开它。该文件可能不存在。
当您从网页上传文件时,它将作为 POST 消息的一部分发布到服务器。您可以从 Form 集合中获取文件。您无需将上传程序转换为 ASP.NET 控件,或添加runat="server"
属性。只要您发布包含输入元素的表单,它将被提交到服务器。
文件的内容将以字节数组的形式存储在表单中。您可以将此字节数组作为文件保存到服务器硬盘的某个位置。
总结:
您不需要知道客户端计算机上文件的路径,因为无论如何您都无法访问它。使用作为表单提交的一部分发布的文件数据,而不是在服务器上保存文件的副本。
【讨论】:
以上是关于从文件 HTML 输入后面的代码中获取完整的文件路径的主要内容,如果未能解决你的问题,请参考以下文章