我正在学习. NET 4.8.1上的ASP.NET Web Api,我想通过使用创建根目录,将文件上载到D:/Repo/Tests009...
中我的项目的App_Data
文件夹
HttpContext.Current.Server.MapPath("~/App_Data")
这将返回以下路径:
C:/Users/MyName/Source/Repos/ProjectApi
但我得到这个错误:
未找到目录异常:找不到路径的一部分:
无效操作异常:类型为"MultipartFormDataStreamProvider"的流提供程序引发了异常。
未找到目录异常:找不到路径"C:\用户\我的名称\源\存储库\测试s009\WebApi\App_Data\BodyPart_d0728dbb-09a1 - 45e3 - 96b4-b15c808ab7b5"的一部分。
这是我的代码:
public class FilesController : ApiController
{
[HttpPost]
[Route("api/Files/Upload")]
public async Task<string> Upload()
{
var root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
try
{
await Request.Content.ReadAsMultipartAsync(provider);
foreach (var file in provider.FileData)
{
var name = file.Headers.ContentDisposition.FileName;
//remove double qoutes from string
var localFileName = file.LocalFileName;
var filePath = Path.Combine("~/App_Data", name);
File.Move(localFileName,filePath);
}
}
catch(Exception ex)
{
return ex.Message;
}
return "File Uploaded!";
}
}
如果你能帮我得到我项目的实际路径,我将非常感激。
我打算将文件发送到项目的App_Data
文件夹,但HttpContext.Current.Server.MapPath
为项目生成了错误的路径。
1条答案
按热度按时间unhi4e5o1#
有趣的问题。我在这行中看到两个bug
生成“结果”文件路径时,必须从文件名中删除1个引号,似乎从“file.Headers.ContentDisposition.FileName”中获取的fileName包含过多引号,例如“file.xlsx”
2“结果”文件路径应该是绝对的,而不是相对的,因此您必须同时使用Server.MapPath和合并
请将该行替换为以下行,以使示例正常工作:
也许你需要检查同名文件是否已经存在。引号截断应该通过一些检查更“优雅”地完成(不确定文件名总是带引号)