获取与FileUpload控件文件的完整路径获取与FileUpload控件文件的完整路径(Get f

2019-06-14 13:19发布

我的工作,它使用FileUpload控件的Web应用程序。 我有完整的文件路径的xls文件“C:\ Mailid.xls”,我试图上传。

当我使用命令

FileUpload1.PostedFile.FileName 

我无法从我的系统完整的文件路径。 然而,当我在另一个系统中使用上述命令它工作正常。

我也尝试没有成功下列命令:

   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));

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

Answer 1:

尝试

Server.MapPath(FileUpload1.FileName);

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



Answer 2:

这是目前真正的,“当你上传文件,浏览器将只发送源文件名,而不是完整路径” -它非常有意义,服务器有没有企业知道文件是否是“C:\ WINDOWS \”或者“ F:\ SOMEDIR \ OTHERDIR \ PERSONALINFO \”。 文件总是被发送,并且是有用的既能帮助用户“识别”的内容和可能的询问文件扩展名,以帮助确定文件类型。

但是经验告诉我的Internet Explorer绝对用来 (在旧版本)发送整个路径。 这是很难找到一个权威的确认(除本apache的FileUpload控件DOCO )

互联网浏览器提供了整个路径上传的文件,而不仅仅是基本文件名

无论如何,你不应该使用,也不希望被任何“现代化”的浏览器发送的完整路径。



Answer 3:

也许你误解的方式FileUpload工作。

当您上传文件时,它有效地从客户端的计算机传送到您的托管应用程序的服务器。 如果你开发的应用程序,最次,客户端和服务器在同一台机器(计算机)。 一旦应用程序部署但是,有可能是任何数量的连接到服务器的客户端,每上传一个文件。

了解客户的一般计算机上的文件的完整路径是没有必要的 - 你经常会想要做与文件内容的东西。 你的例子看起来像ASP.NET C#,所以我猜你使用FileUpload控件。 您可以通过读取原始数据流(在上传的文件中的内容得到FileUpload.PostedFile.InputStream )或保存文件第一( FileUpload.PostedFile.SaveAs ),然后访问保存的文件。 这是你的责任,以保存该文件,如果你希望它是当前请求后访问 - 如果你不这样做,ASP.NET删除。

还有一两件事-不要忘记设置enctype的形式为“multipart / form-data的”物业。 如果不这样做,客户端的浏览器将不发送的文件,你会花颇有几分想知道什么地方出了错。



Answer 4:

随着IE8的,完整的路径,不再发送到Internet区域的站点。

请参阅“文件上传控件”一节在文章的结尾: http://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx讨论。



Answer 5:

文件上传也永远不可能给你出于安全原因的完整路径。



Answer 6:

Convert.ToString(FileUpload1.PostedFile.FileName);


Answer 7:

IE 7和以前的版本发送到相关的服务器上载的文件的全路径input type="file"字段。 Firefox和其他现代浏览器认为这是一个安全漏洞,并没有。 然而,这似乎已被固定在IE 8。

也许你应该将评估为什么你需要完整的文件路径,因为它位于客户端的系统上。 我认为这是真的不应该在所有发布多余的信息。 所有你应该关心的是文件的名称,以便您可以保存文件,而不在更改名称。



Answer 8:

只给我2美分。

这时我也做得到充分的用户的本地路径。 它只有1台机器,我可以复制这个问题,但它确实给了文件的完整路径在用户的机器。

这是我们的应用程序的最终用户这是一个异地服务器上托管。 因此,这不是在本地机器或从它可能恰好是A股在本地服务器上。

你可以解决这个问题,至少有同样的行为被这一切的时候:

Path.GetFileName(fileUpload.FileName)

顺便说一句,只是发现这篇文章该条规定可得发生: http://www.eggheadcafe.com/community/aspnet/17/10092650/fileupload-control-pro.aspx

只是为了确认这个问题。



Answer 9:

我有某种相反的问题,因为原来的海报:我得到的完整路径时,我只想要的文件名。 我用Gabriel的解决方案,得到的只是文件名,但在这个过程中,我发现为什么你在一些机器上,而不是其他的完整路径。

任何计算机加入域会还给你的文件名的完整路径。 我想这与一致的结果,几个不同的计算机上。 我没有为什么的解释,但至少在我的测试是一致的。



Answer 10:

这转储与文件名临时文件夹的文件,然后之后你可以调用它,而不是担心。 因为它会被删除,如果它在你的临时文件夹中的天量。

string filename = Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(),".xls"));
                File.WriteAllBytes(filename, FileUploadControl.FileBytes);


Answer 11:

检查:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="FileUp.aspx.vb" Inherits="FileUp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server"></asp:Label><br />
       <asp:FileUpload ID="FileUpload1" runat="server" /><br />
        <asp:Button ID="Button1" runat="server" Text="Upload" />
    </div>
    </form>
</body>
</html>

码:

Partial Class FileUp
    Inherits System.Web.UI.Page
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim path As String
        Dim path1 As String
        path = Server.MapPath("~/")
        FileUpload1.SaveAs(path + FileUpload1.FileName)
        path1 = path + FileUpload1.FileName
        Label1.Text = path1
        Response.Write("File Uploaded successfully")
    End Sub
End Class


Answer 12:

我使用(在两个单独的机器上)IE 8。 每仍然上传完整的本地文件路径。 正如加布里埃尔建议,Path.GetFileName(fileUploadControl.PostedFile.FileName)似乎是确保你只得到文件名的唯一方法。



Answer 13:

检查FileUpload控件在这个岗位

此外,“上传文件时包含本地目录路径” URLAction已被设置为“禁用” Internet区域。 这种变化可以防止潜在的敏感本地文件系统的信息到互联网泄漏。 例如,而不是提交完整的路径C:\用户\ ericlaw \文件\秘密\ image.png,Internet Explorer 8将现在只提交文件名image.png。

它可以启用在Internet安全的选项



Answer 14:

dim path as string = FileUpload1.PostedFile.FileName

顺便说一句,我使用Visual Studio 2010中,我不知道是否有与其他版本的区别。



Answer 15:

这会不会的问题,如果我们使用IE浏览器。 这是其他浏览器,节省了其他位置的文件,并使用该路径。

如果(FileUpload1.HasFile)

{

字符串文件名= FileUpload1.PostedFile.FileName;

串TempfileLocation = @ “d:\ uploadfiles \”;

串FULLPATH = System.IO.Path.Combine(TempfileLocation,文件名);

FileUpload1.SaveAs(FULLPATH);

回复于(FULLPATH);

}

谢谢



Answer 16:

你不能在客户端的机器上下载文件的完整路径。 您的代码可能在本地主机的工作,因为你的客户端和服务器是在同一台机器,并且该文件的根目录。 但是,如果你在远程机器上运行它,你会得到一个异常。



Answer 17:

在Internet Explorer选项,对自定义安全按钮,安全选项卡上单击,那里有一个选项加载一些文件到服务器时发送的本地路径。

禁用为默认。 只要启用它。



Answer 18:

Path.GetFullPath(fileUpload.PostedFile.FileName);

很抱歉,这会得到你的程序文件目录+文件名。



文章来源: Get full path of a file with FileUpload Control