1

在我的 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

有什么办法可以删除文件吗?

请引导我摆脱这个问题。

4

2 回答 2

5

首先,您应该将流语句打包到using将自动处理处置操作的子句中(即使在出现异常的情况下) - 它会在调试来自未关闭流的奇怪问题时为您节省大量时间

using(var fs = new FileStream(...)) 
{
  using(var bw = new BinaryWriter(fs)
  {
       bw.Write(data);
  }
}

现在异常经常出现,因为您当前的进程没有文件的访问权限(无法删除文件) - 解决它

  • 为您的用户添加完整权限

您可以通过在 Windows 资源管理器中查找文件、检查其属性并在安全选项卡下找到特定权限来执行此操作。

例如,如果您在 IIS 上托管您的页面,则它被标识为应用程序池标识,即 IIS_IUSRS 或 NETWORK SERVICE,并且这些方通常不受信任(或不够受信任而无法删除 file0

于 2013-05-31T07:00:43.913 回答
1

我想,这与特权有关。当用户尝试连接到您的网站时,IIS 会将连接分配给属于来宾组的 IUSER_ComputerName 帐户。该组有安全限制。尝试提升 IUSER_ComputerName 的访问权限。 更多可以在这里找到

于 2013-05-31T07:05:40.827 回答