在我的ASP.Net Web应用程序中,我在HTML 5画布上加载了一个图像,并允许用户在图像上绘制一些图形(矩形框)。一旦用户完成了图像上的图像,我必须将图像保存回同一位置的同名服务器。
我正在使用AJAX
将图像数据传输到服务器。这部分成功完成。
在我的服务器代码中,首先我尝试删除文件,然后在同一位置创建一个同名的新文件。
因此,当我删除该文件时,它正在提升UnAuthorizedAccessException is handled by user code Access to the path 'D:\vs-2010projects\delete_sample\delete_sample\myimages\page_1.png' is denied.
这是我的服务器端C#代码......
[WebMethod()]
public static void UploadImage(string imageData)
{
byte[] data = Convert.FromBase64String(imageData);
if(File.Exists("D:\\vs-2010projects\\delete_sample\\delete_sample\\myimages\\page_1.png"))
{
File.Delete("D:\\vs-2010projects\\delete_sample\\delete_sample\\myimages\\page_1.png");
}
FileStream fs = new FileStream("D:\\vs-2010projects\\delete_sample\\delete_sample\\myimages\\page_1.png", FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(data);
bw.Close();
}//UploadImage
有没有办法删除文件?
请指导我解决这个问题。
答案 0 :(得分:5)
首先,您应该将您的流语句打包到using
子句中,该子句将自动处理dispose操作(即使在异常的情况下) - 在调试来自未关闭的奇怪问题时,它将为您节省大量时间流
using(var fs = new FileStream(...))
{
using(var bw = new BinaryWriter(fs)
{
bw.Write(data);
}
}
现在异常经常发生,因为您当前的进程没有文件的访问权限(无法删除文件) - 要解决它
您可以通过在Windows资源管理器中查找文件,检查其属性并在安全选项卡下找到特定权限来执行此操作。
例如,如果您在IIS上托管您的页面,那么它将被标识为应用程序池标识,该标识符是IIS_IUSRS或NETWORK SERVICE,并且这些方通常不受信任(或者不足以信任以便能够删除file0
答案 1 :(得分:1)
我认为,它与特权有关。当用户尝试连接到您的网站时,IIS会将连接分配给属于Guests组的IUSER_ComputerName帐户。该组有安全限制。尝试提升IUSER_ComputerName的访问权限。 More can be found here