Je viens de commencer à développer des services REST, mais j'ai rencontré une situation difficile: envoyer des fichiers de mon service REST à mon client. Jusqu'à présent, j'ai compris comment envoyer des types de données simples (chaînes, entiers, etc.) mais l'envoi d'un fichier est une question différente car il y a tellement de formats de fichiers que je ne sais pas où je devrais commencer. Mon service REST est fait sur Java et j'utilise Jersey, j'envoie toutes les données en utilisant le format JSON. J'ai lu à propos de l'encodage base64, certaines personnes disent que c'est une bonne technique, d'autres disent que ce n'est pas à cause de problèmes de taille de fichier. Quelle est la bonne façon? Voici comment une simple classe de ressources dans mon projet est à la recherche:Quelle est la bonne façon d'envoyer un fichier du service Web REST au client?
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;
}
}
Je devine que le code pour envoyer un fichier serait quelque chose comme:
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;
}
}
Quel genre d'annotations dois-je utiliser? J'ai vu certaines personnes recommandent pour @GET
en utilisant @Produces({application/x-octet-stream})
, est-ce la bonne façon? Les fichiers que j'envoie sont spécifiques, de sorte que le client n'a pas besoin de parcourir les fichiers. Quelqu'un peut-il me guider dans la façon dont je suis censé envoyer le fichier? Dois-je l'encoder en utilisant base64 pour l'envoyer en tant qu'objet JSON? ou le codage n'est pas nécessaire pour l'envoyer en tant qu'objet JSON? Merci pour toute aide que vous pourriez donner.
Avez-vous une 'java.io.File' réelle (ou chemin du fichier) sur votre serveur ou est les données provenant d'une autre source, comme une base de données, service Web, appel de méthode renvoyer un 'InputStream'? –