【问题标题】:Storing Images in Project Folder - Directory Not Found Error Message在项目文件夹中存储图像 - 找不到目录错误消息
【发布时间】:2016-11-17 16:02:31
【问题描述】:

我正在尝试使用 C# 将图像保存到我的 ASP.NET Web 表单网站中的 SlideImages 文件夹中。

当我尝试使用以下代码提交图片时:

 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.DirectoryNotFoundException”类型的异常发生在 mscorlib.dll 中,但未在用户代码中处理。附加信息:找不到路径“C:\Users\11342\OneDrive\Documents\4th Year\FYP\BallinoraWaterfallCommunity\SlideImages\”的一部分。

Here 是我的项目文件夹结构。我正在尝试将图像存储在项目的 SlideImages 文件夹中。

我使用以下代码成功地将图像存储在“图像”文件夹中。我已经尝试对其进行调整以解决上述问题,但我无法做到。

 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");
}

【问题讨论】:

  • 《第4年》是不是被空间噎住了?
  • @J.McCabe 我之前设法使用不同的代码写入“图像”文件夹,我现在已经在上面发布了。

标签: c# asp.net sql-server


【解决方案1】:

您应该使用Server.MapPath("~/SlideImages)。请注意 ~/ 前缀,它强制 mappath 从 Web 应用程序的根目录开始。

然后添加文件名,因为该文件在磁盘上尚不存在,但您应该使用System.IO.Path.Combine 将映射的根网站路径(和图像文件夹)与文件名结合起来。

您还应该检查目录是否存在。在您的屏幕截图中,您在 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 或由于文件被锁定而无法提供图像。

【讨论】:

    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多