当前位置: 首页 > 知识库问答 >
问题:

java-如何从RESTful web服务发送图像?

贲宜春
2023-03-14

我正在Java上实现一个Restful Web服务,没有框架。我的想法是从文件服务器发送图像,因为将图像存储在数据库中会降低服务器的速度。目前,我有以下返回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;
    }
}

想法?提前谢谢。

共有2个答案

冯霖
2023-03-14

有一个解决办法,但这取决于您使用什么文件服务器来存储图像。

如果是windows文件服务器或S3,则可以从REST服务返回映像的链接。在html页面中,可以使用

应用程序要暴露于外部世界(DMZ之外),那个么您的REST服务应该吐出字节数组。顺便说一句,这不应该大大降低服务器的速度。

廉展鹏
2023-03-14

尝试以下内容:

  @GET
    @Produces(Metodos.Parametros.TYPE_IMAGE_PNG)
    public Response getImage() {
        byte[] bytes = Files.toByteArray("file.png");
        return Response.ok(bytes).build();
    }

您可以尝试流式传输图像。也许会好一点<代码>返回响应。ok(新建ByteArrayInputStream(字节))。build()

然而,无论你选择哪个选项,它都会有点慢。您可以向另一台服务器发送重定向链接,该服务器可以独立于您的应用程序服务器将图像传送到客户端。这比发送图像本身作为响应要好。

 类似资料:
  • 我有一个网络服务,可以按名字搜索一些视频。它会把视频的名字和图像传给我。我应该怎么说哪个图像是哪个视频的?我应该怎么说才能播放 包裹通讯。视频 导入java。util。列表 导入android。应用程序。活动 导入android。操作系统。异步任务; 导入android。操作系统。捆 导入android。看法看法 导入android。看法看法一位听众; 导入android.widget.按钮; 导

  • 我在我的应用程序中做了一个服务来下载图像,这对我来说还不清楚如何将结果(位图)从服务发送到主要活动。我可以那样做吗?或者在服务中,只有一个可能性来保存下载的图像在某个地方,只发送无用的消息?

  • 我正在使用Spring4.0为RESTfulWeb服务创建POC。如果我们只传递字符串或任何其他基本数据类型,它就可以正常工作。 这个很好用。但如果我想将字节流或文件对象传递给函数,我如何编写具有这些参数的函数?我如何编写提供传递字节流的客户端? 我尝试了这个代码,但是得到了415个错误。 客户端代码-使用apache HttpClient

  • 问题内容: 我有一个生成图像的Java Applet。最终,我想将图像数据插入数据库中,因此我想将图像数据临时存储在包含小程序的页面上的表单字段中。我希望在不将图像文件存储在客户端计算机上的情况下执行此操作。 所有这些都来自签名板。这是一些应该从sigObj对象中存储的矢量数据生成位图图像的代码: image变量是BufferedImage对象。另外,如果我只是将图像变量发送回我的JavaScri

  • 我试图发送电子邮件使用gmail smtp使用javax.mail.下面是我的代码 代码工作正常当我在本地服务器上运行它时,但当我尝试在Elastic beanstek上运行它时(我的服务器在AWS EBS上运行),身份验证失败异常即将到来注意:我已打开从Google A/c设置访问不太安全的应用程序,但我仍然收到此错误 javax.mail.身份验证失败异常:534-5.7.14请通过您的网络浏

  • 我在android应用程序中使用nodeJS和mongodb作为后端服务,并使用FCM向用户发送推送通知。为了实现这一点,我在MongoDB上保存了firebase注册令牌。 我想在相应的用户在MongoDb服务器上添加数据时向他们发送推送通知。 这是我在下面添加数据库数据的代码。 现在,一旦数据添加到数据库中,我想向用户发送通知。有人请让我知道如何才能实现所需的任务。任何帮助都将不胜感激。 谢谢