在 c# asp.net Core 中更改上传文件路径

Change Upload File path in c# asp.net Core

我想将路径从当前根文件夹更改为 mt C: 或桌面,例如, 我正在使用此代码:

public IActionResult About(IList<IFormFile> files)
{

    foreach (var file in files)
    {
        var filename = ContentDispositionHeaderValue
                        .Parse(file.ContentDisposition)
                        .FileName
                        .Trim('"');
        filename = hostingEnv.WebRootPath + $@"\{filename}";

        using (FileStream fs = System.IO.File.Create(filename))
        {
            file.CopyTo(fs);
            fs.Flush();
        }
    }


    return View();
}

我尝试更改 webrootpath 或在 $@ 之后进行操作,但无济于事。

除非使用以下选项之一,否则您无法访问 Web 应用程序根文件之外的任何文件:

  1. 使用上传文件控制器:

    <input  type="file" name="UploadFile" /></span>
    

您必须让用户指定他要上传的文件。

  1. 你可以使用FTP,你必须自己做一个服务器。

我不是 ASP 专家,但我知道一件事 :

能够使用 Web 应用程序的隐藏代码自由浏览 C:\ 中的文件将严重缺乏安全性。

编辑:

这是向用户提供文件的方式:

    private void UserDownload(string fileOutPutName, string fileType, string fileContentPath)
    {

        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;filename=" + Server.UrlPathEncode(fileOutPutName));
        Response.ContentType = fileType;
        try
        {
            Response.WriteFile(fileContentPath);
        }
        catch
        {}
        Response.End();
    }

该文件最终会出现在他们浏览器的下载文件夹中。能够将文件写入客户的 C:\ 与访问他的 C:\

一样不安全

ASP.NET不会让你那样做的

另一个答案似乎混淆了从服务器下载文件和上传文件。

IHostingEnvironment.WebRootPath 只是服务器上静态文件的路径(默认情况下:wwwroot 文件夹)。要将上传的文件保存到 WebRootPath 以外的目录,您只需将 hostingEnv.WebRootPath 替换为计算机上任何其他目录的完整路径即可。

public IActionResult About(IList<IFormFile> files)
{
    foreach (var file in files)
    {
        var filename = ContentDispositionHeaderValue
                        .Parse(file.ContentDisposition)
                        .FileName
                        .Trim('"');
        filename = @"C:\UploadsFolder" + $@"\{filename}";

        using (FileStream fs = System.IO.File.Create(filename))
        {
            file.CopyTo(fs);
            fs.Flush();
        }
    }
    return View();
}

但是,您必须确保该目录存在,并且您的应用程序有权写入该目录。 运行 来自 Visual Studio 的调试中的应用程序将 运行 作为您的用户,因此它需要是您有权写入的目录。在生产环境中,这会变得更加复杂,并且取决于您的托管设置。