Загружайте фото в wwroot и не загружайте их URL

Я использовал эту команду, чтобы создать папку для места загрузки фотографий.

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

но это не показывает мне ничего. Загружайте фото в wwroot и не загружайте их URL

и это мой 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?}"
            );
        });
    }

Теперь в чем проблема? Как я могу решить это?

Удалите wwwroot из адреса запроса.

Hatef. 28.01.2019 14:37

Существует ли файл 77777.png в wwwroot/Upload/ProductPictureFolder/ProductMainPicture? Для запроса вы не должны добавлять wwwroot.

Edward 29.01.2019 08:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы добавляете изображения динамически, они больше не являются «статическими» файлами.

Вы должны обслуживать их с контроллера.

[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 28.01.2019 20:45

@Mr-Programer, если адрес вашего изображения указывает на это действие, это действие найдет ваше изображение на диске и вернет его в виде потока. Таким образом, изображение открывается как приложение, а не как пользователь, пытающийся получить к нему доступ через браузер.

Anton Toshik 28.01.2019 21:00

Другие вопросы по теме