Ich habe gerade mit der Entwicklung von REST-Diensten begonnen, bin jedoch auf eine schwierige Situation gestoßen: Senden von Dateien von meinem REST-Dienst an meinen Client. Bisher habe ich verstanden, wie man einfache Datentypen (Zeichenfolgen, Ganzzahlen usw.) sendet, aber das Senden einer Datei ist eine andere Sache, da es so viele Dateiformate gibt, dass ich nicht weiß, wo ich überhaupt anfangen soll. Mein REST-Service wird auf Java erstellt und ich verwende Jersey. Ich sende alle Daten im JSON-Format.
Ich habe über Base64-Codierung gelesen. Einige Leute sagen, dass dies eine gute Technik ist, andere sagen, dass dies nicht auf Probleme mit der Dateigröße zurückzuführen ist. Was ist der richtige Weg? So sieht eine einfache Ressourcenklasse in meinem Projekt aus:
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;
}
}
Ich vermute, der Code zum Senden einer Datei wäre ungefähr so:
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;
}
}
Welche Art von Anmerkungen sollte ich verwenden? Ich habe einige Leute gesehen, die eine @GET
Verwendung empfohlen haben. Ist @Produces({application/x-octet-stream})
das der richtige Weg? Die Dateien, die ich sende, sind spezifisch, sodass der Client die Dateien nicht durchsuchen muss. Kann mich jemand anleiten, wie ich die Datei senden soll? Sollte ich es mit base64 codieren, um es als JSON-Objekt zu senden? oder ist die Codierung nicht erforderlich, um es als JSON-Objekt zu senden? Vielen Dank für jede Hilfe, die Sie geben können.
java.io.File
(oder Dateipfad) auf Ihrem Server oder stammen die Daten aus einer anderen Quelle, z. B. einer Datenbank, einem Webdienst oder einem Methodenaufruf, der einen zurückgibtInputStream
?