创建目录成功但复制文件触发UnauthorizedAccessException的解决方法
问题解决方法
核心错误:未指定完整文件路径
你的代码存在关键问题:FileStream构造参数传入的是文件夹路径(uploadFolderPath),而非包含文件名的完整文件路径。系统会尝试将文件夹当作文件来创建/写入,这必然触发权限拒绝异常——哪怕你能创建文件夹,也不能把文件夹当作文件进行写入操作。
修正后的代码
public string UploadPdfFile(IFormFile file, string folderName) { if (file == null || file.Length == 0) { return string.Empty; } // 定义文件夹路径 string uploadFolderPath = Path.Combine(_env.WebRootPath, @"uploads\books", folderName); if (!Directory.Exists(uploadFolderPath)) Directory.CreateDirectory(uploadFolderPath); // 生成包含文件名的完整文件路径 string fullFilePath = Path.Combine(uploadFolderPath, file.FileName); // 保存文件到指定路径 using (var stream = new FileStream(fullFilePath, FileMode.Create)) { file.CopyTo(stream); } return fullFilePath; }
额外排查点(若修正后仍报错)
- 检查目标文件夹NTFS权限:确保运行应用的身份(如IIS AppPool账户、开发时的当前用户)拥有该文件夹的写入权限。
- 处理非法文件名:如果原文件名包含特殊字符,可通过
Path.GetInvalidFileNameChars()过滤后生成安全文件名。 - 验证进程权限:若使用IIS Express运行,确认IIS Express进程有权写入目标目录(管理员模式运行VS通常可解决,但仍需实际验证)。
内容的提问来源于stack exchange,提问作者Rasik
相关产品推荐
相关产品推荐

