我无法在.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);
}
这发生在localhost上。 我有"访问路径...被拒绝"错误。我试图更改文件夹" Resources"的安全权限,但可能我不知道添加完全控制的组/用户名。
我试过了:
答案 0 :(得分:3)
在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);
答案 1 :(得分:2)
看起来您尝试使用mappedPath分配覆盖目录,这可能是实际原因,而不是权限。
但是,就权限而言,鉴于您引用了IIS_IUSERS,您似乎正在IIS中工作。考虑授予您的进程正在运行的标识的写入权限;检查“身份”' '过程模型'下的(IIS7 +)设置(应用程序池的高级设置) - 如果是ApplicationPoolIdentity,您需要将该标识添加到文件夹的权限中。
即,如果您的应用程序池名为my-app.com,则本地用户将是[iis apppool \ my-app.com]。