文件上传无法取到文件名的全路径的问题.
aspx文件:
    <form id="form1" runat="server" method=post>
    <div>
        <input id="File1" type="file"  runat="server" />
        <input id="Button2" type="submit" value="显示文件名" onclick="return Button2_onclick()"  />
        <br />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
    </form>
Cs文件:
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack)
            {
                this.Label1.Text = this.File1.PostedFile.FileName;
            }
        }
    }我选择了c:\1.txt 这个文件,点击按钮后取到的FileName为:1.txt
而不是我想要的结果是:c:\1.txt这是怎么回事.
理论上PostedFile.FileName 返回结果: 客户端的文件的名称,包含目录路径。
但是我就是取不到包含目录的文件名称,
我就很奇怪,因为原先的程序都是可认取到完全路径的,但是这两天就取不到,不知道那里出了问题
做了这个测试也不行,请高手出招.

解决方案 »

  1.   

    asp.net夜话之六:asp.net基本控件
    asp.net服务器控件是微软为了方便开发者开发而推出的一系列控件,它们都以类似的方式出现在Visual Studio 2005的源视图里,*代表了控件名,如就表示这是一个Button控件。asp.net服务器控件除了提供HTML服务器控件所能提供的功能之外,还有很多功能更为复杂的控件。这些控件可以分为简单控件、容器控件、数据绑定控件、数据源控件和数据验证控及用户自己根据自己业务需要将一些控件组合在一起组成的用户控件等。asp.net控件的特点与HTML服务器控件类似,也有如下特点:(1)asp.net服务器控件必须有一个在当前页面中唯一的ID属性和runat=”server”属性;(2)asp.net服务器控件必须放在服务器端表单中;(3)asp.net服务器控件最终会被解释成普通HTML标记发送到客户端浏览器。本文主要介绍以下控件:Button控件TextBox控件Web服务器控件的特殊客户端事件FileUpload控件Literal控件Panel控件PlaceHolder控件
      

  2.   

    FileUpload控件
    FileUpload控件是一个很重要的控件,它被Web服务器最终解释为形如“<input type=”file”…/>”这样的普通HTML控件。
    它有如下常见属性: 属性名 数据类型 说明 
    FileBytes byte[] 上传的文件内容的字节数组表示形式 
    FileContent Stream 上传文件的数据流 
    FileName string 上传文件在客户端的名字 
    HasFile bool  指示是否上传了文件 
    PostedFile HttpPostedFile 获取文件基础的HttpPostedFile对象 
      
    这个HttpPostedFile对象能帮我们做很多工作,它也有一些有用的常见属性:
    属性名 数据类型 说明 
    ContentLength int 上传的文件内容的字节长度 
    ContentType string 上传文件的MIME 内容类型 
    FileName string 上传文件的在客户端的名字 
    InputStream Stream 指向上传文件的Stream对象 
      FileUpload控件还有一个void SaveAs (string filename)的方法,这个方法用于将上传的文件保存到服务器上。一般来说,使用FileUpload控件上传文件一般有如下几个步骤:
    (1)利用HasFile属性判断是否上传了文件。
    (2)在服务器上指定一个物理路径,并检查这个物理路径是否存在,如果不存在则先创建。
    (3)指定上传文件在服务器上的上传路径,利用SaveAs()保存上传的文件。这一步还可以做一些其它检查工作,比如检查上传的文件格式是否符合要求或文件内容大小是否符合要求。
    (4)将相对路径或者URL地址保存起来,以便客户访问或者下载。
    这里要着重强调的是:我们保存上传的时候保存文件用的是物理路径,但是要保存的、日后客户端能访问得到的却是相对路径或者URL地址。
      

  3.   

    就算你获取到了,获取到的也是上传文件的客户端全路径也是没有用的,服务器端的路径要通过Server.MapPath()获得,这样程序放到任何目录下都不会存在文件夹找不到的情况。
    如:protected void btnUpload_Click(object sender, EventArgs e) 
        { 
            //判断是否上传了文件 
            if (fileUpload.HasFile) 
            { 
                //指定上传文件在服务器上的保存路径 
                string savePath = Server.MapPath("~/upload/"); 
                //检查服务器上是否存在这个物理路径,如果不存在则创建 
                if (!System.IO.Directory.Exists(savePath)) 
                { 
                    //需要注意的是,需要对这个物理路径有足够的权限,否则会报错 
                    //另外,这个路径应该是在网站之下,而将网站部署在C盘却把上传文件保存在D盘 
                    System.IO.Directory.CreateDirectory(savePath); 
                } 
                savePath = savePath + "\\" + fileUpload.FileName; 
                fileUpload.SaveAs(savePath);//保存文件 
                //不过需要注意的是,在客户端访问却需要指定的是URL地址,而不是在服务器上的物理地址 
                literal.Text = string.Format("<a href='upload/{0}'>upload/{0}</a>", fileUpload.FileName); 
            } 
      

  4.   

    问题不在于此,我关心的主要问题在于什么原因导致了PostedFile.FileName 取不到文件的全路径.
      

  5.   

    刚刚也试了FileUpload1 控件,取 FileUpload1.FileName也是不行,不能取到带目录的全路径,只能取到最后的文件名
      

  6.   

    你在服务端获得是文件,不是文件的路径。
    当上传文件客户端会以一种流的方式写到服务端去,然后又转化为文本对象,而文件名称就是这个对象的一个属性,文件所在路径不是它的属性如果你注意了,你用Javascript获得上传控件的内容就是文件的路径
      

  7.   

    <input type="file" name="file" onchange="changeimg(this.value)" />
    <label id="lab"></label>
    <img src="#" id="img" />
    <script>
    function changeimg(url)
    {
    document.getElementById('img').src=url;
    url = document.getElementById('img').src;
    document.getElementById('lab').innerHTML=url;
    }
    </script>可以得到的
      

  8.   

    但以前程序都是这样取的,可以取到.FileName
    而且帮助也说了,返回的是全路径,麻烦各位给我看看是什么问题
      

  9.   

    maddemon  我需要取到的是在客户端上的全路径PostedFile.FileName 就是取客户端上的全路径,但是就是取不到,
    只取得一个文件名(不带路径)
      

  10.   

    WinForm是取的全路径,asp.net是只能取到文件名的,除非你用脚本
      

  11.   

    sakeyi 你能不能帮我测试一下,asp.net下的结果
      

  12.   

     
    //this.Label1.Text = this.File1.PostedFile.FileName 不是FileName  是FileNames 吧 … 
      

  13.   

    在IE中设置允许获得客户端文件路径。ie默认给禁止了,只要设置一下就OK了。技术交流qq:755624068;注明 程序员
      

  14.   


    通过查找资料,发现C#获取文件路径的方法有以下几种://获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。   
    string     str5=Application.StartupPath;
    //可获得当前执行的exe的文件名。       
    string     str1     =Process.GetCurrentProcess().MainModule.FileName;
    // 获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。   备注     按照定义,如果该进程在本地或网络驱动器的根目录中启动,则此属性的值为驱动器名称后跟一个尾部反斜杠(如“C:\”)。如果该进程在子目录中启动,则此属性的值为不带尾部反斜杠的驱动器和子目录路径(如“C:\mySubDirectory”)。   
    string     str2=Environment.CurrentDirectory;
    //获取应用程序的当前工作目录。   
    string     str3=Directory.GetCurrentDirectory();
    //获取基目录,它由程序集冲突解决程序用来探测程序集。   
    string     str4=AppDomain.CurrentDomain.BaseDirectory;
    //获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。   
    string     str5=Application.StartupPath;
    //获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。   
    string     str6=Application.ExecutablePath;
    //获取或设置包含该应用程序的目录的名称。
    string     str7=AppDomain.CurrentDomain.SetupInformation.ApplicationBase
      

  15.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    namespace 获取文件路径
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private string filepath;        private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                openFileDialog1.FileName = "*.txt";
                openFileDialog1.Filter = "接线图(*.txt)|*.txt";
                openFileDialog1.RestoreDirectory = true;
                openFileDialog1.FilterIndex = 1;
                //openFileDialog1.ShowDialog();
                if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);
                    FileInfo info = new FileInfo(openFileDialog1.FileName);
                    filepath = info.ToString ();
                }
            }        private void button1_Click(object sender, EventArgs e)
            {
                StreamReader sr;
                string s;
                try
                {
                    sr = File.OpenText(filepath);
                    s = sr.ReadToEnd();
                    richTextBox1.Text = s.ToString();
                    sr.Close();
                }
                catch(Exception ex)
                {
                    MessageBox.Show("文件不存在");
                }
            }        private void panel1_Paint(object sender, PaintEventArgs e)
            {
                if(filepath !="")
                {
                    MessageBox .Show ("buweikong");
                }
            }    }
    }
      

  16.   

    IE8和火狐都取不到上传文件的全路径,不过可以在服务器端通过http.Current.Request.Files[0]获取到上传的文件!
      

  17.   

    18楼的方法有效
    在IE中设置允许获得客户端文件路径。ie默认给禁止了,只要设置一下就OK了。技术交流qq:755624068;注明 程序员我估计是类似BT,电驴 的一些下载工具自动的帮你打开这个选项,所以File1.PostedFile.FileName 可以获得到全路径再次感谢18楼的兄弟
      

  18.   

    那 发布之后 呢  还是没有获取上传图片的路径  怎么弄啊 急(⊙﹏⊙b汗)...
    报错:
    System.IO.Directory.CreateDirectory(获取上传图片的路径);不可访问