我刚刚开始开发REST服务,但我遇到了一个困难的情况:从我的REST服务发送文件到我的客户端.到目前为止,我已经掌握了如何发送简单数据类型(字符串,整数等),但发送文件是另一回事,因为有太多的文件格式,我不知道我应该在哪里开始.我的REST服务是基于Java的,我使用的是Jersey,我使用JSON格式发送所有数据.
我读过有关base64编码的内容,有人说这是一种很好的技术,有人说这不是因为文件大小问题.什么是正确的方法?这就是我项目中的简单资源类的外观:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我猜测发送文件的代码是这样的:
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 …Run Code Online (Sandbox Code Playgroud) 我的要求是,我应该向客户发送一个10MB的zip文件,并提供宁静的服务.我在论坛中发现发送StreamingOutput对象的代码是更好的方法,但是如何StreamingOutput在以下代码中创建对象:
@Path("PDF-file.pdf/")
@GET
@Produces({"application/pdf"})
public StreamingOutput getPDF() throws Exception {
return new StreamingOutput() {
public void write(OutputStream output) throws IOException, WebApplicationException
{
try {
//------
} catch (Exception e) {
throw new WebApplicationException(e);
}
}
};
}
Run Code Online (Sandbox Code Playgroud)