我正在尝试将照片上传添加到我的网站。我将在将其长期存储在亚马逊s3上之前上传到我的网站。
这是我正在使用的代码:
using (var fs = new FileStream(fullpath, FileMode.Create))
{
while (startlength < totalContentLength)
{
int bytes = FileUpload1.PostedFile.InputStream.Read(buffer, 0, bufferSize);
startlength += bytes;
fs.Write(buffer, 0, bytes);
_percent = Convert.ToInt32(startlength * 100 / totalContentLength / 2);
Cache[_processkey] = _percent;
}
fs.Seek(0, SeekOrigin.Begin);
var thumbnailbytes = new byte[fs.Length];
fs.Read(thumbnailbytes, 0, Convert.ToInt32(fs.Length));
thumbnailbytes = GlobalUtilities.ResizeImage(thumbnailbytes,
GlobalSettings.CustomerImages.MaxThumbnailImageWidth,
GlobalSettings.CustomerImages.MaxThumbnailImageHeight);
File.WriteAllBytes(fullpath, thumbnailbytes);
}
我已将Everyone和IIS_USRS的访问权限授予fullpath
目录,并且我以管理员身份运行Visual Studio 2013
。但是,当它到达代码中的这一行时:
using (var fs = new FileStream(fullpath, FileMode.Create))
我收到错误
Access to the path 'C:\Users\ME\Documents\Business\Folder\repos\vb\Z\Replicated\Replicated\test\before_b3874a79-1e75-44df-bc47-6940ad4f496e.jpg' is denied.
我错过了什么或做错了什么?
我正在通过VS2013
运行IIS
和debuggin。
答案 0 :(得分:1)
在IIS中托管应用程序时,此应用程序将以为应用程序池配置的标识运行。根据Windows和IIS的特定版本,此标识可能会有所不同。这是一篇很好的文章,我邀请您阅读有关应用程序池标识的信息:http://www.iis.net/learn/manage/configuring-security/application-pool-identities
因此,一旦您确定了运行应用程序的身份,您只需要将此身份写入权限授予C:\Users\ME\Documents\Business\Folder\repos\vb\Z\Replicated\Replicated\test
文件夹即可。
这就是说,出于开发目的,通常更容易在内置开发Web服务器(IIS Express)中托管您的应用程序,而不是依赖于更重,更全面的IIS。在这种情况下,您的应用程序将以用于启动Visual Studio的标识运行。因此,以管理员身份启动它通常会在本地解决这些问题。
但熟悉并了解您的应用程序正在运行的特定身份以及它具有哪些权限是一件好事,因为当您在生产中部署时,您可能会遇到同样的问题。