Я использовал эту команду, чтобы создать папку для места загрузки фотографий.
public class ApplicationRootSiteData : IApplicationRootSiteData
{
private readonly IHostingEnvironment _hostingEnvironment;
private readonly IHttpContextAccessor _httpContextAccessor;
public ApplicationRootSiteData(IHostingEnvironment hostingEnvironment, IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
_hostingEnvironment = hostingEnvironment;
}
public string RootFolderName => "Upload";
public string ProductPictureFolder => "ProductPictureFolder";
public string ProductMainPictureFolder => "ProductMainPicture";
public string WebRootPath => _hostingEnvironment.WebRootPath;
public Uri GetAbsoluteUri()
{
var request = _httpContextAccessor.HttpContext.Request;
UriBuilder uriBuilder = new UriBuilder();
uriBuilder.Scheme = request.Scheme;
uriBuilder.Host = request.Host.Host;
uriBuilder.Path = request.Path.ToString();
uriBuilder.Query = request.QueryString.ToString();
return uriBuilder.Uri;
}
public string RootPath => Path.Combine(WebRootPath, RootFolderName);
public string GetProductPicturePath()
{
return Path.Combine(WebRootPath, RootFolderName, ProductPictureFolder);
}
public string GetProductMainPicturePath()
{
string path = Path.Combine(WebRootPath, RootFolderName, ProductPictureFolder, ProductMainPictureFolder);
return path;
}
public string GetNewPath()
{
string productMainPicturePath = GetProductMainPicturePath();
return Path.Combine(productMainPicturePath);
}
}
[HttpPost("UploadProductPic"), DisableRequestSizeLimit]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public IActionResult UploadProductPic()
{
var file = Request.Form.Files[0];
try
{
if (!Directory.Exists(_applicationRoot.GetNewPath()))
{
if (!Directory.Exists(_applicationRoot.RootPath))
{
Directory.CreateDirectory(_applicationRoot.RootPath);
}
if (!Directory.Exists(_applicationRoot.GetProductPicturePath()))
{
Directory.CreateDirectory(_applicationRoot.GetProductPicturePath());
}
if (!Directory.Exists(_applicationRoot.GetProductMainPicturePath()))
{
Directory.CreateDirectory(_applicationRoot.GetProductMainPicturePath());
}
}
if (file.Length > 0)
{
string fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
string fullPath = Path.Combine(_applicationRoot.GetNewPath(), file.Name);
using (var stream = new FileStream(fullPath, FileMode.Create))
{
file.CopyTo(stream);
}
}
return Ok();
}
catch (Exception e)
{
return BadRequest();
}
}
и он работает и создает папку и загружает изображение в нее.
теперь мне нужно показать изображение в Angular (Front-End ), но он показывает мне эту ошибку:
Not allowed to load local resource: file:///C:/Users/Mr-Programer/Desktop/New%20folder/StoreFinal/StoreFinal/wwwroot/Upload/ProductPictureFolder/ProductMainPicture/77777.png
и я использую этот URL в ядре asp: https://localhost:44390/wwwroot/Upload/ProductPictureFolder/ProductMainPicture/77777.png
но это не показывает мне ничего. 
и это мой StartUp:
app.UseHttpsRedirection();
app.UseCors("CorsPolicy");
app.UseAuthentication();
app.UseStaticFiles();
app.UseDefaultFiles();
var scopeFactory = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
}
Теперь в чем проблема? Как я могу решить это?
Существует ли файл 77777.png в wwwroot/Upload/ProductPictureFolder/ProductMainPicture? Для запроса вы не должны добавлять wwwroot.





Когда вы добавляете изображения динамически, они больше не являются «статическими» файлами.
Вы должны обслуживать их с контроллера.
[HttpGet("/img/{id}/{name}")]
public FileStreamResult GetImage(string id, string path){
var myPathToFile = Path.Combine(_rootPath, id, path);
var stream = new FileStream(myPathToFile, FileMode.Open, FileAccess.Read);
return new FileStreamResult(stream ,$"image/{path.Split('.')[1]}")
}
я могу сделать это, потому что я должен вернуть список продуктов, и один из них имеет адрес изображения
@Mr-Programer, если адрес вашего изображения указывает на это действие, это действие найдет ваше изображение на диске и вернет его в виде потока. Таким образом, изображение открывается как приложение, а не как пользователь, пытающийся получить к нему доступ через браузер.
Удалите wwwroot из адреса запроса.