Получить изображение (двоичные данные) из базы данных с помощью. Net Core и Angular 8 - PullRequest
2 голосов
/ 11 июля 2020
• 1000 для клиента в. NET Core 3.1 с Angular 8

// документ примечания является столбцом моего изображения Вот мой код:

public async Task<dynamic> GetImage(int id)
        {

            string imageBase64Data =Convert.ToBase64String(_repository.Get(id).document);
            string imageDataURL =string.Format("data:image/jpg;base64,{0}",imageBase64Data);
           
            return imageDataURL;
        }

Я использую ABP framework, а мой класс - ApplicationService Base Class

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Пока что у меня сложилось впечатление, что APB Dynami c Контроллеры Api, сгенерированные для ApplicationService, не имеют соглашения о создании действий Api, возвращающих FileStreamResult-s.

Итак, для загрузки файлов из Api на основе APB я бы вручную создал Controller для этой цели введите требуемый сервис, который будет возвращать массив Stream или byte [].

[Route("api/[controller]/[action]")]
public class ImageController: AbpController
{    
    private readonly IImageStore _imageStore;

    public ImageController(IImageStore imageStore)
    {
        _imageStore = imageStore;
    }

    [HttpGet]
    [FileResultContentType("image/jpeg")]
    public async Task<FileStreamResult> GetImageStream(string imageId)
    {
        Stream imageStream = await _imageStore.GetImage(imageId);
        imageStream.Seek(0, SeekOrigin.Begin);
        
        var contentDisposition = new ContentDispositionHeaderValue("attachment");
        contentDisposition.SetHttpFileName($"{imageId}.jpg");
        Response.Headers.Add(HeaderNames.ContentDisposition, contentDisposition.ToString());
        
        return new FileStreamResult(imageStream, "image/jpeg");
    }
}

Обратите внимание на один важный атрибут, чтобы он хорошо работал с nswag FileResultContentType. Для получения дополнительной информации обратитесь к этому сообщению:

0 голосов
/ 13 июля 2020

Я нашел его на стороне сервера (. Net Core). Я использовал FileStreamResult , это вернет ссылку, которая позволит вам загрузить файл, или вы можете использовать FileContentResult чтобы вернуть файл напрямую

//myImage.document is a byte[]
public async Task<FileStreamResult> GetDoc(int id)
 {
            var myImage = await _repository.GetAsync(id);
            var stream = new MemoryStream(myImage.document);
            
            return new FileStreamResult(stream, "image/jpeg" /*chnage this based on your image type */ )
            {
                FileDownloadName = "test.jpeg"
            };
           
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...