Właśnie zacząłem rozwijać usługi REST, ale natknąłem się na trudną sytuację: wysyłanie plików z mojej usługi REST do mojego klienta. Do tej pory zrozumiałem, jak wysyłać proste typy danych (łańcuchy, liczby całkowite itp.), Ale wysyłanie pliku to inna sprawa, ponieważ istnieje tak wiele formatów plików, że nie wiem, od czego powinienem zacząć. Moja usługa REST jest wykonywana na Javie i używam Jersey, wysyłam wszystkie dane w formacie JSON.jaki jest prawidłowy sposób wysyłania pliku z usługi WWW REST do klienta?
Przeczytałem o kodowaniu base64, niektórzy twierdzą, że jest to dobra technika, inni twierdzą, że nie jest to spowodowane problemami z rozmiarami plików. Jaki jest prawidłowy sposób? Jest to, jak prosta klasa zasób w moim projekcie poszukuje:
import java.sql.SQLException;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriInfo;
import com.mx.ipn.escom.testerRest.dao.TemaDao;
import com.mx.ipn.escom.testerRest.modelo.Tema;
@Path("/temas")
public class TemaResource {
@GET
@Produces({MediaType.APPLICATION_JSON})
public List<Tema> getTemas() throws SQLException{
TemaDao temaDao = new TemaDao();
List<Tema> temas=temaDao.getTemas();
temaDao.terminarSesion();
return temas;
}
}
Zgaduję kod do wysyłania pliku byłoby coś takiego:
import java.sql.SQLException;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path("/resourceFiles")
public class FileResource {
@GET
@Produces({application/x-octet-stream})
public File getFiles() throws SQLException{ //I'm not really sure what kind of data type I should return
// Code for encoding the file or just send it in a data stream, I really don't know what should be done here
return file;
}
}
Jaki rodzaj adnotacji należy użyć? Widziałem, że niektórzy ludzie polecają @GET
używając @Produces({application/x-octet-stream})
, czy to jest właściwy sposób? Pliki, które wysyłam, są specyficzne, więc klient nie musi przeglądać plików. Czy każdy może mnie poprowadzić w jaki sposób mam wysłać plik? Czy mogę zakodować go przy użyciu base64, aby wysłać go jako obiekt JSON? czy kodowanie nie jest konieczne, aby wysłać je jako obiekt JSON? Dziękuję za pomoc, którą możesz udzielić.
Czy masz rzeczywisty 'java.io.File' (lub pliku path) na serwerze lub są dane pochodzące z innego źródła, takie jak bazy danych, usług internetowych, wywołanie metody zwracanie 'InputStream'? –