Posiadam metodę kontrolera ASP.NET MVC 4 Web Api, która przekazuje listę identyfikatorów plików i zwraca obrazy miniatur dla tych plików.Jaki jest najlepszy sposób na serwowanie wielu plików binarnych za pomocą jednej metody WebApi?
Tak, klient może przejść na liście identyfikatorów numerycznych (np 10, 303, 29), a metoda zwraca List gdzie ThumbnailImage wygląda trochę jak ten:
class ThumbnailImage
{
public int Id { get; set; }
// Some other stuff
public byte[] RawData { get; set; }
}
tego powodu, że osoba dzwoniąca przechodzi na listę identyfikatorów, zamiast wykonywać jedno połączenie za przedmiot, mam nadzieję, że będzie oczywiste - do pobrania mogą być dziesiątki lub setki elementów i staram się unikać całego ruchu HTTP, który byłby wymagany do pobrania ich pojedynczo .
Obecnie używam RestSharp i JSON.NET, więc moje obiekty ThumbnailImage są przekazywane przez przewód jako JSON. Z punktu widzenia prostoty kodowania wszystko jest w porządku, ale JSON nie jest wydajnym sposobem reprezentowania danych binarnych.
Tak więc, myślę, że powinienem zwrócić surowe bajty jako strumień oktetu ... jednak, chociaż mogę to łatwo zrobić dla pojedynczego obrazu, nie jestem pewien, jak najlepiej to zrobić dla wielu obrazów, szczególnie gdy muszę również zwrócić ID i różne inne informacje dla każdego pliku. (Identyfikator jest wymagany, ponieważ wyniki niekoniecznie zostaną zwrócone w określonej kolejności - a niektórych plików może brakować).
I może po prostu napisać wszystko fragmentarycznie do strumienia odpowiedzi, tak aby dla każdej pozycji zapisałem identyfikator (odpowiednio zakodowany), a następnie długość danych obrazu, a następnie same dane obrazu, a następnie przez to samo dla następnego elementu itp
rozmówca będzie wtedy po prostu zachować czytania ze strumienia dopóki nie został wyczerpany, czyniąc założenia dotyczące kodowania (i długości!) z identyfikatorów itd
Myślę, że to by zadziałało, ale wydaje się nieporęczne - czy istnieje lepszy sposób?
Jak będzie klient korzysta z obrazów? Czy obrazy do wyświetlenia na stronie internetowej lub do pobrania jako archiwum? Coś jeszcze? – EBarr
Zastanawiasz się, czy możesz wysłać odpowiedź jako MultartContent, gdzie wewnętrzna zawartość mogłaby być StreamContent mająca surowy strumień bajtów –
@EBarr: Piszę także aplikację kliencką, więc jest to zamknięte środowisko. Będę wyświetlał obrazy w aplikacji WinForms (jako miniatury wyników wyszukiwania). –