在 JSON 响应中返回文件/文件 (Java-Jersey-ReST)

Posted

技术标签:

【中文标题】在 JSON 响应中返回文件/文件 (Java-Jersey-ReST)【英文标题】:Returning file/files in JSON response (Java-Jersey-ReST) 【发布时间】:2014-12-17 17:01:15 【问题描述】:

我正在研究一个在 JSP 上显示用户消息的用例。流程详情如下:

所有邮件都将显示在带有附件图标的表格中 当用户点击附件时,文件应该会被下载。 如果有多个附件,用户可以选择需要的 一个下载。 附件将存储在本地文件系统中,附件的路径将由系统确定。

我已尝试通过参考这些 SO 问题来实施:

Input and Output binary streams using JERSEY? Return a file using Java Jersey file downloading in restful web services

但是,这并没有解决我的目的。我有以下问题:

    是否可以在一个响应中连同附件 (Inputstream) 一起发送消息数据(如主题、消息、消息 ID 等)? 如果是,我的资源方法中@Produces 注释的MediaType 需要是什么?目前我的资源用@Produces(MediaType.APPLICATION_JSON) 注释。这行得通吗? 如何在响应中发送文件数据?

任何指针表示赞赏。 TIA。

【问题讨论】:

【参考方案1】:

    您可以将自定义数据添加到响应标头,所以是的,您可以发送此类消息数据。将数据添加到响应 Header。

    @Produces(MediaType.APPLICATION_JSON) 将不起作用,除非客户端接受 JSON 作为文件,他们应该做什么和不应该做什么;)

    正确的MediaType 取决于您要提交的文件类型。

    您可以使用默认的 MediaType / MIME-Type MediaType.APPLICATION_OCTET_STREAM / application/octet-stream (Is there a “default” MIME type?),但我认为最好为您的文件使用正确且准确的 MIME-Type。

    您将在Input and Output binary streams using JERSEY? 中找到使用球衣发送文件数据的工作示例 - 因此无需再次回答这个问题:)

希望这对您有所帮助,祝您有美好的一天。

【讨论】:

以上是关于在 JSON 响应中返回文件/文件 (Java-Jersey-ReST)的主要内容,如果未能解决你的问题,请参考以下文章

如何存储 JSON 响应并保存到 JSON 文件中

如何解决“文件上传返回JSON数据,在IE下提示下

返回正确的 JSON 响应

在 Nest.js 中,如何在我的 API 响应中提供与我的 JSON 对象捆绑在一起的静态内容文件

SpringMVC返回JSON数据以及文件上传过滤静态资源

使用 NextJS API 发送文件作为响应