从文件HTML输入中获取代码后面的完整文件路径

时间:2010-11-19 04:13:27

标签: asp.net file-upload code-behind filepath html-input

我使用文件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”浏览上传,Code Behind中的结果只是图像名称“Orange.jpg”而不是完整的“C:/Orange.jpg”,这是获取来自本地驱动器的文件将被上载。

从后台代码中捕获完整图像路径以上传到服务器的最佳方法是什么?

谢谢。

2 个答案:

答案 0 :(得分:2)

可以在输入元素中添加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页面中的表单元素上设置enctype

<form id="yourform" runat="server" enctype="multipart/form-data">

答案 1 :(得分:1)

  

我从“C:/Orange.jpg”浏览上传,Code Behind中的结果只是图像名称“Orange.jpg”而不是完整的“C:/Orange.jpg”,这是获取来自本地驱动器的文件将被上载。

您将无法从客户端的计算机上提取文件。在开发程序时,客户端和服务器是同一台计算机,但在部署时,服务器和客户端将是不同的计算机。当后面的代码执行时(在服务器上),如果你试图打开C:\ Orange.jpg,你将尝试从服务器的硬盘上打开它。该文件可能不存在。

从网页上传文件时,它将作为POST消息的一部分发布到服务器。您可以从Form集合中获取此文件。您不需要将上传器转换为ASP.NET控件,也不需要添加runat="server"属性。只要您发布包含输入元素的表单,就会将其提交给服务器。

文件的内容将作为字节数组存储在表单中。您可以将此字节数组作为文件保存到服务器的硬盘某处。

总结:

您无需知道客户端计算机上文件的路径,因为无论如何都无法访问它。使用作为表单提交的一部分发布的文件数据来保存服务器上的文件副本。