ContentRootPath
- это локальный путь к root вашего приложения. Локальный путь работает только в контексте локальной машины, то есть в этом случае сервера, на котором запущено приложение. Таким образом, вы можете использовать этот путь, чтобы указать, где сервер должен хранить путь, но для пользователя этот путь не имеет никакого смысла, поскольку он не может получить доступ к вашей локальной файловой системе.
Кроме этого, * Путь 1004 * content root - это также путь к сборкам вашего приложения, а также к файлам конфигурации вашего приложения. Как правило, вы не хотите, чтобы эта папка была доступна извне.
Вместо этого вы можете использовать WebRootPath
, который является путем к папке wwwroot
. По умолчанию эта папка обслуживается через промежуточное ПО stati c files. Таким образом, содержимое доступно для конечных пользователей. Вам просто нужно создать правильный путь:
private readonly string _webRootPath;
public HomeController(IHostingEnvironment env)
{
_webRootPath = env.WebRootPath;
}
[HttpPost]
public async Task<IActionResult> FileUpload(IEnumerable<IFormFile> files)
{
var targetFolder = Path.Combine(_webRootPath, "uploads");
foreach (var file in files)
{
var fileName = $"{Guid.NewGuid()}.png";
using (var fileStream = new FileStream(Path.Combine(targetFolder, fileName), FileMode.Create, FileAccess.Write))
{
file.CopyTo(fileStream);
}
// file is stored at `…/wwwroot/uploads/{fileName}`
// so public path is `/uploads/{fileName}`
var publicPath = "/uploads/" + fileName;
TempData["link"] = publicPath;
}
return new RedirectResult(@"Privacy");
}
Путь ссылки - это ссылка на файл в папке wwwroot
, доступный извне.