访问路径…在.net中上传文件时被拒绝
本文关键字:文件 拒绝 路径 net 访问 | 更新日期: 2023-09-27 18:08:57
我无法在。net c#中上传文件。我使用以下代码:
try
{
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
foreach (var file in provider.Contents)
{
var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/Resources");
var dataStream = await file.ReadAsStreamAsync();
FileStream fileStream = File.Create(mappedPath, (int)dataStream.Length);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent("Successful upload", Encoding.UTF8, "text/plain");
response.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue(@"text/html");
return response;
}
catch (Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e.Message);
}
这发生在本地主机上。我有"进入路径……"否认"的错误。我试图更改文件夹"资源"的安全权限,但可能我不知道要添加哪个组/用户名完全控制。
I have try:
- 选择计算机名并添加网络服务-完全控制
- 选择计算机名并添加IIS_IUSERS -完全控制
- 我已经尝试了以上所有方法,并且还以管理员身份运行IDE
在您的foreach
循环中有:
foreach (var file in provider.Contents)
{
var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/Resources");
var dataStream = await file.ReadAsStreamAsync();
FileStream fileStream = File.Create(mappedPath, (int)dataStream.Length);
}
File.Create
的第一个参数应该是文件的路径,但mappedPath
是目录的路径。你可以这样做:
var filePath = Path.Combine(mappedPath, fileNameWithExtension);
FileStream fileStream = File.Create(filePath, (int)dataStream.Length);
看起来您试图用您的mappedPath分配覆盖目录,这可能是实际原因,而不是权限。
然而,在权限方面,考虑到你引用的是IIS_IUSERS,看起来你是在IIS中工作。考虑将写权限授予进程运行的标识;检查"进程模型"(应用程序池的高级设置)下的"身份"(IIS7+)设置-如果它是ApplicationPoolIdentity,你需要将该身份添加到文件夹的权限中。
。,如果您的应用程序池名为my-app.com,则本地用户将为[iis appool 'my-app.com]。