【问题标题】:wrong image path save in sql错误的图像路径保存在sql中
【发布时间】:2015-11-12 12:58:13
【问题描述】:

我是 asp.net c# 的新手,不知何故我能够将图像保存在文件夹中,它是 sql 中的路径,但代码保存的是不正确的完整路径。

下面是sql表图片。

我的代码是

con.Open();
if (Image.HasFile) {
    string filename = Path.GetFileName(Image.PostedFile.FileName);
    String ext = System.IO.Path.GetExtension(Image.FileName);
    string filesize = Image.FileBytes.Length.ToString();

    if (ext.ToLower() == ".JPG" || ext.ToLower() == ".jpg" || ext.ToLower() == ".PNG" || ext.ToLower() == ".png" || ext.ToLower() == ".GIF" || ext.ToLower() == ".gif") {
        string filepath = Server.MapPath("~/Posts/") + filename;
        Image.SaveAs(filepath);
        string qry1 = "insert into Images(Image_Name,Image_Size,Image_Path)values('" + filename + "','" + filesize + "','" + filepath + "')";
        SqlCommand cmmd = new SqlCommand(qry1, con);
        cmmd.ExecuteNonQuery();
    } else if (ext.ToLower() == ".mp4" || ext.ToLower() == ".MP4" || ext.ToLower() == ".mpeg" || ext.ToLower() == ".MPEG" || ext.ToLower() == ".AVI" || ext.ToLower() == ".avi") {
        string filepathv = Server.MapPath("~/Posts/videos/" + filename);
        Image.SaveAs(filepathv);
        string qry1 = "insert into videos(Video_Name,Video_Size,Video_Path)values('" + filename + "','" + filesize + "','" + filepathv + "')";
        SqlCommand cmmd = new SqlCommand(qry1, con);
        cmmd.ExecuteNonQuery();
    }
}

【问题讨论】:

    标签: c# sql asp.net


    【解决方案1】:

    首先,使用SqlParamter来避免Sql注入,你应该在stackoverflow上找到很多关于这个的:How does SQLParameter prevent SQL Injection?

    其次,Server.MapPath 返回完整的映射文件路径,绝对是您的托管环境。您目前似乎将所有内容都托管在 IIS Express 中(以 F5/Start 启动项目)。要获取相对路径,您需要图像/视频的基本目录的路径。看看How to get relative path from absolute path。您只需要指定您的工作目录。例如C:\inetpub\your-project\。希望这会有所帮助。

    编辑 如果您想使用您的工作目录来计算相对路径,请尝试使用:Environment.CurrentDirectory

    【讨论】:

      【解决方案2】:

      您正在检索文件扩展名并使用ToLower(),但您将其与大写变体进行比较?还使用 SqlCommand 的参数。

      con.Open();
      if (Image.HasFile) {
          string filename = Path.GetFileName(Image.PostedFile.FileName);
          String ext = System.IO.Path.GetExtension(Image.FileName);
          string filesize = Image.FileBytes.Length.ToString();
          string qry1;
          string dir;
      
          if (ext.ToLower() == ".jpg" || ext.ToLower() == ".png" || ext.ToLower() == ".gif") {
              dir = "Posts/";
              qry1 = "insert into Images(Image_Name, Image_Size, Image_Path) values (@fn, @fs, @fp)";
      
          } else if (ext.ToLower() == ".mp4" || ext.ToLower() == ".mpeg" || ext.ToLower() == ".avi") {
              dir = "Posts/videos/";
              qry1 = "insert into videos(Video_Name, Video_Size, Video_Path) values (@fn, @fs, @fp)";
          }
          string filepath = Server.MapPath("~/" + dir + filename);
          Image.SaveAs(filepath);
      
          SqlCommand cmmd = new SqlCommand(qry1, con);
          cmmd.Parameters.AddWithValue("fn", filename);
          cmmd.Parameters.AddWithValue("fs", filesize);
          cmmd.Parameters.AddWithValue("fp", filepath);
          cmmd.ExecuteNonQuery();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-06
        • 1970-01-01
        • 2013-06-15
        • 1970-01-01
        • 2018-08-11
        • 2020-01-25
        • 2011-06-20
        • 1970-01-01
        相关资源
        最近更新 更多