none
上传文件保存路径问题 RRS feed

  • 问题

  • 我用FileUpload控件上传文件。并把得到的值存到数据库中。但发现在代码里得到的路径值存在数据库后少掉了"\"符号。请教:如何能在保存数据库时保留"\"?
    zy
    2009年5月21日 0:45

答案

  • 问题解决。还有一个问题请教下孟老师:路径中的"\\"代表正常的"\"么?这个转义的含义不是很清楚。希望能指点下。
    zy
    你好,\符号用于转义专用,如果要使用原貌,需要写成\\,告诉编译器。在C#中,可以这样使用@符号,string value = @"c:\abc.txt";

    邹俊才
    • 已标记为答案 张烨 2009年5月21日 1:51
    2009年5月21日 1:50
    版主
  • 你知道js需要转义符的,你传的话需要这样写:

    你知道js需要转义符的,你传的话需要这样写:
    C#:
    假如:
    String fp = "c:\\aa.jpg";
    
    你传的时候需要这样:
    C#:
    String fp = "c:\\aa.jpg";
    
    fp = fp.Replace("\\","\\\\");
    
    Response.Write("var fp = '" + fp + "';");
    


    【孟子E章】

    • 已标记为答案 张烨 2009年5月21日 1:48
    2009年5月21日 1:23
    版主

全部回复

  • 少不少\跟保存数据库没有关系。你往数据库插入之前就没有吧
    【孟子E章】
    2009年5月21日 1:05
    版主
  • 孟老师说得对。我刚跟踪了下程序里相关的值,的确是在程序里就没有的。但这是为什么呢?
    zy
    2009年5月21日 1:07
  • 如果保存到数据的路径名为 X:\UpLoad, 文件名为 XXX.jpg, 获取路径的方法为 
    string filePath = Path.Combine("X:\UpLoad", "XXX.jpg");
     //filePath  = @"X:\UpLoad\XXX.jpg"

    知识改变命运,奋斗成就人生!
    2009年5月21日 1:08
    版主
  • #region 上传文件按钮事件
        protected void btnUpload_Click(object sender, EventArgs e)
        {
            string fileName = string.Empty;
            string serverPath = string.Empty;
            string fullPath = string.Empty;

            if(this.fileUp.HasFile == true)
            {
                fileName = this.fileUp.FileName;
                while(true)
                {
                    int dian = fileName.LastIndexOf('.');
                    if(fileName[dian - 1] == '.')
                    {
                        fileName = fileName.Remove(dian - 1, 1);
                    }
                    else
                    {
                        break;
                    }
                }

                serverPath = Server.MapPath("~/FA/DDW");
                fullPath = serverPath + "\\" + fileName;
                this.fileUp.PostedFile.SaveAs(fullPath);
            }


            this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "", "<script>window.parent.callBack('" + fullPath + "');</script>");
        }
        #endregion
    上面是我上传时的代码。大家看看有什么地方引起了最后路径值的不正确?


    zy
    2009年5月21日 1:11
  • 最后一句代码里的callBack函数内容如下:
    function callBack(filename)
            {
                var file=document.getElementById("ctl00_ContentPlaceHolder1_hf");
                file.value=filename;
            }


    zy
    2009年5月21日 1:12
  • 最后一句代码里的callBack函数内容如下:
    function callBack(filename)
            {
                var file=document.getElementById("ctl00_ContentPlaceHolder1_hf");
                file.value=filename;
            }


    zy

    你不要再客户端取路径,现在的浏览器默认只显示文件名,不显示路径的。ie7之后可以设置,
    你还是在服务器端取的好
    【孟子E章】
    2009年5月21日 1:18
    版主
  • 但我是把路径当做是一个String变量来传的,这有影响么?既然是String,那应该对其中的内容原封不动的传递啊。
    zy
    2009年5月21日 1:21
  • 你知道js需要转义符的,你传的话需要这样写:

    你知道js需要转义符的,你传的话需要这样写:
    C#:
    假如:
    String fp = "c:\\aa.jpg";
    
    你传的时候需要这样:
    C#:
    String fp = "c:\\aa.jpg";
    
    fp = fp.Replace("\\","\\\\");
    
    Response.Write("var fp = '" + fp + "';");
    


    【孟子E章】

    • 已标记为答案 张烨 2009年5月21日 1:48
    2009年5月21日 1:23
    版主
  • 就是说,你需要将输出到js的变量最终得是这样的 var fp = "c:\\xx.jpg" 而不是 var fp = "c:\xx.jpg"
    【孟子E章】
    2009年5月21日 1:27
    版主
  • 刚才再次跟踪了代码,发现变量的值在被callBack函数调用前就已被转换了,所以callBack接收的值本身就有问题。


    zy
    2009年5月21日 1:30
  • 问题解决。还有一个问题请教下孟老师:路径中的"\\"代表正常的"\"么?这个转义的含义不是很清楚。希望能指点下。
    zy
    2009年5月21日 1:37
  • js和C#中,\\ 代表实际的一个 \
    【孟子E章】
    2009年5月21日 1:46
    版主
  • 哦,明白了。谢谢孟老师。
    zy
    2009年5月21日 1:48
  • 问题解决。还有一个问题请教下孟老师:路径中的"\\"代表正常的"\"么?这个转义的含义不是很清楚。希望能指点下。
    zy
    你好,\符号用于转义专用,如果要使用原貌,需要写成\\,告诉编译器。在C#中,可以这样使用@符号,string value = @"c:\abc.txt";

    邹俊才
    • 已标记为答案 张烨 2009年5月21日 1:51
    2009年5月21日 1:50
    版主