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

时间:2016-06-17 18:29:15

标签: c# asp.net asp.net-mvc-5 asyncfileupload

我想将当前根文件夹的路径更改为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或在$ @之后进行操作,但无济于事。

2 个答案:

答案 0 :(得分:2)

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

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运行调试中的应用程序将以用户身份运行它,因此它需要是您有权写入的目录。在生产环境中,这会变得更加复杂,取决于您的托管设置。

答案 1 :(得分:0)

您无法访问网络应用根文件之外的任何文件,除非您使用以下其中一项otpions:

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

    <input  type="file" name="UploadFile" /></span>
    
  2. 你必须让用户指定他想要上传的文件。

    1. 您可以使用FTP,您必须自己制作服务器。
    2. 我不是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不会让你这样做