asp.net 返回一个错误的路径(目录未找到异常:找不到路径的一部分)

yhived7q  于 2023-01-10  发布在  .NET
关注(0)|答案(1)|浏览(160)

我正在学习. 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为项目生成了错误的路径。

unhi4e5o

unhi4e5o1#

有趣的问题。我在这行中看到两个bug

var filePath = Path.Combine("~/App_Data", name);

生成“结果”文件路径时,必须从文件名中删除1个引号,似乎从“file.Headers.ContentDisposition.FileName”中获取的fileName包含过多引号,例如“file.xlsx”
2“结果”文件路径应该是绝对的,而不是相对的,因此您必须同时使用Server.MapPath和合并
请将该行替换为以下行,以使示例正常工作:

var filePath = Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data"), name.Substring(1, name.Length - 2));

也许你需要检查同名文件是否已经存在。引号截断应该通过一些检查更“优雅”地完成(不确定文件名总是带引号)

相关问题