.Net core 2.2 Api zwracanie obrazka.

0

Witam. Męczę się od rana ze zwracaniem obrazka poprzez API. Mam akcje na upload obrazka która przyjmuje IFormFile jako parametr.

var userID = HttpContext.User.GetUserId();
                byte[] image = file.GetBytes();   
                var command = new UploadCategoryImageCommand(userID, file.FileName, image);
                var response = await _mediator.Send(command);
                return GetResponse(response);

Tutaj zwrócenie tablicy bajtów

public static byte[] GetBytes(this IFormFile file)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                file.CopyTo(ms);

                return ms.ToArray();
            }
        }

I to leci do bazy. I jest ok, tzn zapisuje. Teraz jak chce pobrać to i wyświetlić na froncie (React) to mi nie działa. Tzn do frontu zwracam taki viewmodel

public string Id { get; set; }
        public string CategoryName { get; set; }
        public string ParentId { get; set; }
        public byte[] Image { get; set; } (jak zamienie na string i zrobię konwersje na base64 też lipa)

Czyli nie zwracam tylko i wyłączenie samego obrazka ale też kilka innych informacji więc nie mogę zrobić return file.
Moim zamiarem jest zwrócenie na widok obrazka w postaci base64 czyli coś w tym stylu

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..

Teraz pytanie jak to zrobić, bo żadne konwersje z tablicy bytów na base64String nie dają poprawnego resultatu. Czyli coś tam się zwraca ale obrazka nie wyświetla (zły base64 string).

Z tego co widziałem w klasycznym .net core MVC zwracają na widok właśnie tablice byte w viewmodelu a mi to nie działa na api.

Jak próbuje w controllerze skonwertować na base64 (przed zapisem do bazy) to mam zupełnie inny wynik niż np w jakimś konwerterze online.
Jak to rozwiązać bo już kończą mi się pomysły :/

0

Co jest nie tak z uzyskaniem tablicy byte w powyższym kodzie? Bo wstępnie zauważyłem ze jak zrobię z IFormFile obiekt Image a z niego tablicę bytów to konwersja do Base64 działa dobrze.

0

Obrazki w bazie? base64? wtf... Przecież base64 dla trochę większych obrazków już zaczyna przerastać ja wielkością

Moja sugestia: weź zamiast przesyłania obrazka, to prześlij Id obrazka w bazie i zwracaj go jako File

public class ViewModel
{
	public string Id { get; set; }
	public string CategoryName { get; set; }
	public string ParentId { get; set; }
	public string ImageId { get; set; }
}

var bytes = File.ReadAllBytes(path) // raczej możesz pominąć
return File(bytes, MediaTypeNames.Application.Octet, name);

A później wstrzyknij reactem

<img src="https://yourdomain.com/Images/9c716f4c260e437ca6a3ffbcd064607e">

lub

<img src="https://yourdomain.com/Images?id=9c716f4c260e437ca6a3ffbcd064607e">
0

To są małe obrazki dotyczące kategorii. Nic duzego. Nie widzę nic złego w trzymaniu ich w bazie

1 użytkowników online, w tym zalogowanych: 0, gości: 1