C# 奇怪的字符串格式+;mysql中文件上传的路径名
嘿,伙计们,我上传图片到我的项目路径时遇到了问题。图片包含在~/userdata/UserID/uploadedimage/image.jpg中 我使用下面的方法上传并在数据库中存储图片的路径C# 奇怪的字符串格式+;mysql中文件上传的路径名,c#,asp.net,mysql,sql,html,C#,Asp.net,Mysql,Sql,Html,嘿,伙计们,我上传图片到我的项目路径时遇到了问题。图片包含在~/userdata/UserID/uploadedimage/image.jpg中 我使用下面的方法上传并在数据库中存储图片的路径 protected void UploadButton_Click(object sender, EventArgs e) { if (FileUploadControl.HasFile) { try {
protected void UploadButton_Click(object sender, EventArgs e)
{
if (FileUploadControl.HasFile)
{
try
{
string theUserId = Session["UserID"].ToString();
OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=root; Password=commando;");
cn.Open();
//string filename = Path.GetFileName(FileUploadControl.FileName);
string fileuploadpath = Server.MapPath("~/userdata/" + theUserId + "/uploadedimage/") + Path.GetFileName(FileUploadControl.FileName);
FileUploadControl.SaveAs(fileuploadpath);
StatusLabel.Text = "Upload status: File uploaded!";
OdbcCommand cmd = new OdbcCommand("INSERT INTO Pictures (UserID, picturepath) VALUES ('" + theUserId + "' , '" + fileuploadpath + "')", cn);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
}
}
}
}
我发现路径不是我的项目目录的路径,它有点奇怪:
这是我数据库中的一个片段,第一个idPictures=1是我需要的正确路径名
idPictures=2是文件上载插入到我的数据库中的文件吗
我如何获得它,使其提供如下路径名:
~/userdata/2/uploadedimage/batman-for-facebook.jpg
编辑:
如果我尝试这样做:
string fileuploadpath = ("~/userdata/"+theUserId+"/uploadedimage/")+Path.GetFileName(FileUploadControl.FileName);
FileUploadControl.SaveAs(fileuploadpath);
StatusLabel.Text = "Upload status: File uploaded!";
OdbcCommand cmd = new OdbcCommand("INSERT INTO Pictures (UserID, picturepath) VALUES ('"+theUserId+"','"+fileuploadpath+"')", cn);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
}
}
}
}
我得到一个错误:
无法上载该文件。出现以下错误:SaveAs方法配置为需要根路径,而路径“~/userdata/1/UploadeImage/holypally.jpg”没有根路径。我怀疑它将反斜杠视为SQL语句中的转义字符。别忘了,您正在使用
Server.MpaPath
——也就是说,您正在尝试查找文件的Windows绝对文件名
当您不使用参数化SQL语句,而是直接将用户指定的文本包含到SQL中时,就会发生这种情况不要这样做。使用参数化SQL命令,单独指定值,这样至少就不需要担心不可靠的值
当然,您仍然需要确定是否确实要存储转换后的路径,但这是另一回事。为了回答我自己的问题,我必须创建两个字符串,一个纯粹用于文件上载,另一个纯粹用于数据库路径名存储:
string filenameDB = Path.GetFileName(FileUploadControl.FileName);
string fileuploadpath = Server.MapPath("~/userdata/"+theUserId+"/uploadedimage/")+Path.GetFileName(FileUploadControl.FileName);
FileUploadControl.SaveAs(fileuploadpath);
string fileuploadpaths = ("~/userdata/"+theUserId+"/uploadedimage/")+filenameDB;
StatusLabel.Text = "Upload status: File uploaded!";
OdbcCommand cmd = new OdbcCommand("INSERT INTO Pictures (UserID, picturepath) VALUES ('"+theUserId+"','"+fileuploadpaths+"')", cn);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
}
}
}
呃,也许是因为idpictures 2缺少了它们,所以它的反面效果也是如此,但是为什么它不像第一张图片那样省钱呢path@Garrith:您正在调用
Server.MapPath
并将结果作为picturepath
的值插入。你确定你了解Server.MapPath
的功能吗?不,我不需要翻译的路径,是的,我了解参数化SQL语句,但我想先看看是否能正确获得路径名,然后再担心反链接。最初我听说MapPath是~因此我使用它,我不知道它翻译了“完整”路径这是否意味着我可以删除它并设置自己的路径名?
}