将文件从本地计算机上传到服务器时,它显示
"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");
}
这有什么问题?
答案 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
)或经过身份验证的请求用户。