Загружайте фотографии в wwroot и не загружайте их URL - PullRequest
0 голосов
/ 28 января 2019

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

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 ), но оно показывает мне эту ошибку:

Не разрешено загружать локальный ресурс: 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

, но он ничего не показывает.Reponse

и это мой автозапуск:

        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?}"
            );
        });
    }

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

1 Ответ

0 голосов
/ 28 января 2019

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

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

[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]}")
}
...