上传图像在服务器上不起作用

时间:2014-06-30 14:20:39

标签: c# asp.net

将文件从本地计算机上传到服务器时,它显示

"Server Error in '/' Application.
Access to the path 'G://images\blog-image2.jpg' is denied."

有人可以帮助我....请。我的c#代码是这样的:

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["dbconnection"].ToString());
    //Open the database connection
    con.Open();
    //Query to insert images path and name into database
    SqlCommand cmd = new SqlCommand("Insert into tblimgs(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("default.aspx");
}

这有什么问题?

2 个答案:

答案 0 :(得分:1)

您需要确保您使用的帐户有权访问该文件路径。

也可能有助于为IIS用户帐户授予对该文件夹的访问权限(我相信IUSR)。

答案 1 :(得分:1)

您需要检查您的应用程序运行的用户,可能是出于安全原因,用户帐户无权写入任何子文件夹。授予该用户对images文件夹的写权限,并确保该文件夹是您唯一授予其写入权限的文件夹,以便最大限度地降低安全风险。

您还可以将代码重构为:

fileuploadimages.SaveAs(Path.Combine(Server.MapPath("~/images"),filename)));

因为MapPath()没有向映射路径追加一个尾部反斜杠,因为它无法知道路径是目录还是文件(它不会检查给定路径是否确实存在)。

修改 要为该文件夹授予正确的权限,首先需要从应用程序池中找到该网站运行的标识(默认情况下,这是应用程序池标识)。查找IIS APPPOOL\DefaultAppPool用户。有关详细信息,请参阅官方IIS站点上的此article

如果这对您不起作用,请检查您的asp.net帐户{MACHINE}\ASPNET是否具有该图像位置的写入权限。考虑将资源的访问权限授予ASP.NET请求标识。为此,请右键单击下载文件夹Properties > Security Tab > Edit > Add > locations > choose your local machine > click OK >ASPNET下方键入"Enter the object name to select" >。单击Check Names选中所需访问的框(完全控制)。如果这对您不起作用,请考虑对Network Service执行相同操作。

现在,这应显示您的本地{MACHINENAME}\ASPNET帐户,然后您为此帐户设置写入权限。

否则,如果应用程序通过<identity impersonate="true"/>模拟,则标识将是匿名用户(通常为IUSR_MACHINENAME)或经过身份验证的请求用户。