在 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 应用程序根文件之外的任何文件:
使用上传文件控制器:
<input type="file" name="UploadFile" /></span>
您必须让用户指定他要上传的文件。
- 你可以使用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 的调试中的应用程序将 运行 作为您的用户,因此它需要是您有权写入的目录。在生产环境中,这会变得更加复杂,并且取决于您的托管设置。
我想将路径从当前根文件夹更改为 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 应用程序根文件之外的任何文件:
使用上传文件控制器:
<input type="file" name="UploadFile" /></span>
您必须让用户指定他要上传的文件。
- 你可以使用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 的调试中的应用程序将 运行 作为您的用户,因此它需要是您有权写入的目录。在生产环境中,这会变得更加复杂,并且取决于您的托管设置。