我正在 Java 上实现 Restful Web Service ,没有框架。我的想法是从文件服务器发送图像,因为将它们存储在数据库中会降低服务器的速度。到目前为止,我有以下代码,它返回json内容:
@Path("articulo")
public class ArticuloResource {
@Context
private UriInfo context;
private final ArticuloService service;
private final Gson gson;
/**
* Creates a new instance of ArticuloResource
*/
public ArticuloResource() {
this.service = new ArticuloService();
this.gson = new Gson();
}
/**
* Retrieves representation of an instance of ArticuloResource
* @return an instance of com.tienda.rest.pojo.Articulo
*/
@GET
@Produces(Metodos.Parametros.TYPE_APPLICATION_JSON)
public String getJson() {
return this.gson.toJson(this.service.seleccionarTodo());
}
@GET
@Path("novedades")
@Produces(Metodos.Parametros.TYPE_APPLICATION_JSON)
public String getNovedades() {
return "Novedades";
}
@GET
@Path("{id}")
@Produces(Metodos.Parametros.TYPE_APPLICATION_JSON)
public String getArticulo(@PathParam("id") Integer id) {
return this.gson.toJson(this.service.getUnique(id));
}
/**
* PUT method for updating or creating an instance of ArticuloResource
* @param content representation for the resource
* @return an HTTP response with content of the updated or created resource.
*/
@PUT
@Consumes(Metodos.Parametros.TYPE_APPLICATION_JSON)
public void putJson(Articulo content) {
}
@GET
@Produces(Metodos.Parametros.TYPE_IMAGE_PNG)
public Response getImage() {
return null;
}
}
想法?提前谢谢。
答案 0 :(得分:1)
请尝试以下操作:
class Keeper:
# constructor, requires a 3-D array
def __init__(self, third_dim):
self.x = []
self.y = []
if third_dim.ndim == 3:
for row in third_dim:
for col in row:
self.x.append(col[0])
self.y.append(col[1])
您可以尝试流式传输图像。它可能会好一点。 @GET
@Produces(Metodos.Parametros.TYPE_IMAGE_PNG)
public Response getImage() {
byte[] bytes = Files.toByteArray("file.png");
return Response.ok(bytes).build();
}
然而,不管你选择哪个选项,它都会有点慢。您可以将重定向链接发送到另一台服务器,该服务器可以独立于您的应用服务器将图像传送到客户端。它比发送图像本身更好。
答案 1 :(得分:0)
有一种解决方法,但这取决于您用于存储图像的文件服务器。
如果是Windows文件服务器或S3,您可以从REST服务返回图像的链接。在html页面中,您可以使用from Tkinter import *
import time
ventana = Tk()
v = StringVar()
v.set("30")
def temporizador():
counter = 29
if counter <= 0:
v.set("tiempo")
else:
v.set(str(counter))
counter -= 1
ventana.after(1000, temporizador)
etiqueta = Label(ventana, textvariable = v)
etiqueta.pack()
boton = Button(ventana, text="Empezar", command = temporizador)
boton.pack()
ventana.mainloop()
。但是(对于Windows文件服务器)这适用于DMZ,而不是客户端的外部n / w。
如果应用程序要暴露给外部世界(DMZ外部),那么您的REST服务应该吐出字节数组。 顺便说一句,这不应该大大减慢您的服务器速度。