在项目文件夹中存储图像-目录未找到错误消息
本文关键字:消息 错误 项目文件 项目 文件夹 图像 存储 | 更新日期: 2023-09-27 18:18:21
我试图将图像保存到我的ASP中的SlideImages文件夹。. NET web forms网站,使用c#。
当我尝试使用以下代码提交图像时:
protected void btnSubmitImage_Click(object sender, EventArgs e)
{
//Get Filename from fileupload control
string filename = Path.GetFileName(fileuploadimages.PostedFile.FileName);
//Save images into SlideImages folder
fileuploadimages.SaveAs(Server.MapPath("SlideImages/" + filename));
//Open the database connection
con7.Open();
//Query to insert images name and Description into database
SqlCommand cmd = new SqlCommand("Insert into SlideShowTable(ImageName,Description) values(@ImageName,@Description)", con7);
//Passing parameters to query
cmd.Parameters.AddWithValue("@ImageName", filename);
cmd.Parameters.AddWithValue("@Description", txtDesc.Text);
cmd.ExecuteNonQuery();
//Close dbconnection
con7.Close();
txtDesc.Text = string.Empty;
BindDataList();
}
当尝试执行上面的第4行代码时,我得到以下错误消息:
System.IO类型的异常。在mscorlib.dll中发生了DirectoryNotFoundException',但未在用户代码中处理。其他信息:找不到路径"C:'Users'11342'OneDrive'Documents'4th Year'FYP'BallinoraWaterfallCommunity'SlideImages'"的一部分。
这是我的项目文件夹结构。我试图将图像存储在我的项目的SlideImages文件夹中。
我使用下面的代码成功地将图像存储在"images"文件夹中。
protected void btnSubmit_Click(object sender, EventArgs e)
{
//Get Filename from fileupload control
string filename = Path.GetFileName(fileuploadimages.PostedFile.FileName);
//Save images into Images folder
fileuploadimages.SaveAs(Server.MapPath("Images/" + filename));
//Getting dbconnection from web.config connectionstring
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["BallinoraDBConnectionString1"].ToString());
//Open the database connection
con.Open();
//Query to insert images path and name into database
SqlCommand cmd = new SqlCommand("Insert into Group_Images(ImageName,ImagePath) values(@ImageName,@ImagePath)", con);
//Passing parameters to query
cmd.Parameters.AddWithValue("@ImageName", filename);
cmd.Parameters.AddWithValue("@ImagePath", "Images/" + filename);
cmd.ExecuteNonQuery();
//Close dbconnection
con.Close();
Response.Redirect("~/Admin.aspx");
}
您应该使用Server.MapPath("~/SlideImages)
。注意~/
前缀,它强制映射路径从web应用程序的根开始。
然后添加文件名,因为文件在磁盘上还不存在,但您应该使用System.IO.Path.Combine
将映射的根网站路径(和images文件夹)与文件名组合。
还应该检查该目录是否存在。在您的屏幕截图中,您在Images
中有内容,因此该文件夹可能在您部署时被复制到您的目标网站路径。另一个是空的,在部署应用程序时可能不会创建它,因为没有内容可复制。
下面是修改后的代码,检查它是否存在,如果不存在则创建它。您应该验证web应用程序的用户上下文是否有足够的权限在根网站目录中创建一个目录。
var directory = Server.MapPath("~/SlideImages");
if(!System.IO.Directory.Exists(directory))
System.IO.Directory.Create(directory);
fileuploadimages.SaveAs(System.IO.Path.Combine(directory, filename));
边注
你应该用using
块包装任何实现IDisposable
的实例,或者确保它们在包含类型的dispose方法中被处置。我注意到在你的第二个例子中,你创建了一个SqlConnection
实例,然后称为close
,这不是一个很好的做法。这是因为如果你有一个异常,发生你的SqlConnection, SqlCommand,或任何其他需要清理资源的东西会比需要的时间更长,这可能会导致以后的问题,如超过同时允许打开的Sql Server连接的最大数量或无法提供图像,因为有一个锁在文件上。