首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从Java portlet (JSR-286)中的字节数组下载pdf文件?

从Java portlet (JSR-286)中的字节数组下载pdf文件,可以通过以下步骤实现:

  1. 首先,将字节数组转换为InputStream对象,可以使用ByteArrayInputStream类来实现:
代码语言:txt
复制
byte[] pdfBytes = // 字节数组
InputStream inputStream = new ByteArrayInputStream(pdfBytes);
  1. 接下来,需要设置响应头信息,指定下载文件的类型和名称:
代码语言:txt
复制
PortletResponse portletResponse = (PortletResponse) response; // 获取PortletResponse对象
portletResponse.setContentType("application/pdf"); // 设置响应类型为PDF
portletResponse.setProperty("Content-Disposition", "attachment; filename=\"example.pdf\""); // 设置下载文件的名称
  1. 然后,将InputStream中的数据写入到响应输出流中,实现文件下载:
代码语言:txt
复制
OutputStream outputStream = portletResponse.getPortletOutputStream(); // 获取响应输出流
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, bytesRead);
}
outputStream.flush();
outputStream.close();

完整的代码示例如下:

代码语言:txt
复制
public void downloadPDF(ActionRequest request, ActionResponse response) throws IOException {
    byte[] pdfBytes = // 字节数组
    InputStream inputStream = new ByteArrayInputStream(pdfBytes);

    PortletResponse portletResponse = (PortletResponse) response;
    portletResponse.setContentType("application/pdf");
    portletResponse.setProperty("Content-Disposition", "attachment; filename=\"example.pdf\"");

    OutputStream outputStream = portletResponse.getPortletOutputStream();
    byte[] buffer = new byte[4096];
    int bytesRead;
    while ((bytesRead = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, bytesRead);
    }
    outputStream.flush();
    outputStream.close();
}

这样,通过Java portlet (JSR-286)中的字节数组下载pdf文件的功能就实现了。

推荐的腾讯云相关产品:腾讯云对象存储(COS)

  • 概念:腾讯云对象存储(COS)是一种海量、安全、低成本、高可靠的云存储服务,适用于存储和处理任意类型的文件数据。
  • 优势:高可靠性、高可用性、低成本、安全稳定。
  • 应用场景:网站数据存储、大规模数据备份、容灾与恢复、多媒体共享和分发等。
  • 产品介绍链接地址:https://cloud.tencent.com/product/cos
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【专业技术】什么是JBoss Portal?

但是这样程序每一个程序员实现过程、标准都完全不同,为了能够让这样框架有一个统一标准,于是出现了Portal,基于JavaPortal标准发展到今天已经是2.0规范了(JSR-286),遵守这一规范服务器框架实现也有了不少...Portlet:一个Portlet是一个基于Java技术Web组件,由Portlet容器负责管理,能够处理请求和产生动态内容输出。...Portlet Instance:Portlet实例,一个Portlet对象,能够放置在多个页面显示相同状态。...这些内容之间关系是:一个Portal上可以运行很多个Portlet容器,每一个Portlet容器可以包含很多个Portlet页面,每一个Portlet页面可以显示无数个Portlet动态内容。...如上所述就是Portal一些概念,那么接下来我们需要知道就是支持Portal服务器(JBoss Portal)如何获取、安装、配置,我们又如何在这样服务器编写我们自己Portlet页面和Portlet

1.2K50

写给大忙人看JavaMinIO服务器中下载文件(3)

前面两章介绍了 MinIO 文件服务器环境搭建,以及在 Java 中上传文件至 MinIO 文件服务器,现在,一起来看下如何 MinIO 文件服务器中下载文件吧 1、获取文件对象 我们在 MinIO...工具类,获取文件对象方法,即获取文件输入流对象 /** * 获取文件 * * @param bucketName bucket名称 * @param objectName 文件名称 * @return...objectName,是指文件路径,即存储桶下文件相对路径 例如,图片地址为 http://127.0.0.1:9000/bucketName/20200806/1596681603481809....png 那么 objectName 就为 20200806/1596681603481809.png 2、下载文件 我们需要编写一个 API 来进行访问从而下载文件 /** * 获取文件 * * @param...fileUrl 为文件绝对路径,即可以直接访问路径,还需要通过此路径,截取得到文件相对路径(即去掉 IP 地址和端口,去掉存储桶名称路径) 3、测试 通过访问 API http://127.0.0.1

3.9K20

java基础io流——OutputStream和InputStream故事(温故知新)

参考链接: Java InputStream类 io流概述:  IO流用来处理设备之间数据传输,上传文件下载文件Java对数据操作是通过流方式,Java用于操作流对象都在IO包。 ...byte[] b) public void write(byte[] b,int off,int len) 方法可看出,只能通过字节写出  outputStream.write("hello".getBytes...[] b)返回是读到字节个数,读到字节放在了bytes字节数组里,读到末尾没数据了返回-1。 ...  利用输入流读取一个文件字节,再利用输出流将读取到字节写出到另一个文件(不存在会自动创建)  package io2; import java.io.FileInputStream; import...字节流一次读写一个数组速度明显比一次读写一个字节速度快很多,这是加入了数组这样缓冲区效果。

60740

java基础io流——OutputStream和InputStream故事(温故知新)

io流概述: IO流用来处理设备之间数据传输,上传文件下载文件Java对数据操作是通过流方式,Java用于操作流对象都在IO包。...[] b) public void write(byte[] b,int off,int len) 方法可看出,只能通过字节写出 outputStream.write("hello".getBytes...[] b)返回是读到字节个数,读到字节放在了bytes字节数组里,读到末尾没数据了返回-1。...利用输入流读取一个文件字节,再利用输出流将读取到字节写出到另一个文件(不存在会自动创建) package io2; import java.io.FileInputStream; import...字节流一次读写一个数组速度明显比一次读写一个字节速度快很多,这是加入了数组这样缓冲区效果。 java本身在设计时候,也考虑到了这样设计思想(装饰设计模式后面讲解),所以提供了字节缓冲区流。

85020

java.io.outputstream_java input

大家好,又见面了,我是你们朋友全栈君。 io流概述: IO流用来处理设备之间数据传输,上传文件下载文件Java对数据操作是通过流方式,Java用于操作流对象都在IO包。...[] b) public void write(byte[] b,int off,int len) 方法可看出,只能通过字节写出 outputStream.write("hello".getBytes...[] b)返回是读到字节个数,读到字节放在了bytes字节数组里,读到末尾没数据了返回-1。...利用输入流读取一个文件字节,再利用输出流将读取到字节写出到另一个文件(不存在会自动创建) package io2; import java.io.FileInputStream; import...字节流一次读写一个数组速度明显比一次读写一个字节速度快很多,这是加入了数组这样缓冲区效果。 java本身在设计时候,也考虑到了这样设计思想(装饰设计模式后面讲解),所以提供了字节缓冲区流。

35720

Spring模块组成(框架组成、整体架构、体系架构、体系结构)

Spring是一个轻量级Java开发框架,致力于简化Java开发。 Spring 总共大约有 20 个模块, 由 1300 多个不同文件构成。...该语言支持设置和获取属性值、属性分配、方法调用、访问数组、集合和索引器内容、逻辑和算术运算、变量命名以及SpringIOC容器以名称检索对象。它还支持列表投影、选择以及常用列表聚合。...主要作用是在 JVM 启用时, 生成一个代理类, 程序员通过代理类在运行时修改类字节, 从而改变一个类功能, 实现 AOP 功能。...集成类、文件上传支持类、Filter类和大量辅助工具类。...portlet 模块:实现web模块功能聚合,类似于Servlet模块功能,提供了Portlet环境下MVC实现。

2.1K10

Java IO 基础知识总结

IO 流在 Java 中分为输入流和输出流,而根据数据处理方式又分为字节流和字符流。 Java IO 流 40 多个类都是如下 4 个抽象类基类中派生出来。...字节流 InputStream(字节输入流) InputStream用于源头(通常是文件)读取数据(字节信息)到内存java.io.InputStream抽象类是所有字节输入流父类。...read(byte b[ ]) : 输入流读取一些字节存储到数组 b 。如果数组 b 长度为零,则不读取。如果没有可用字节读取,返回 -1。... Java 9 开始,InputStream 新增加了多个实用方法: readAllBytes() :读取输入流所有字节,返回字节数组。...Reader(字符输入流) Reader用于源头(通常是文件)读取数据(字符信息)到内存java.io.Reader抽象类是所有字符输入流父类。

48230

面试官:Java缓冲流真的性能很好吗?我看未必

(ByteArrayOutputStream)亦是如此,它们不需要创建临时文件,直接在内存中就可以完成对字节数组压缩,加密,读写以及序列化。...刚好,我们手头有一本《Java性能权威指南》PDF版,大小为66MB,我们通过普通文件流和缓冲流进行文件读取和复制,看一下耗时对比。...PDF文件总耗时:" + (end - start) + " 毫秒"); } /*通过缓冲字节流进行pdf文件读取和拷贝*/ public void copyPdfWithBuffer...PDF文件总耗时:" + (end - start) + " 毫秒"); }}输出:使用普通文件流复制PDF文件总耗时:221611 毫秒使用缓冲字节流复制PDF文件总耗时:228 毫秒然后,我们将注释掉代码放开...使用普通文件流复制PDF文件总耗时:106 毫秒使用缓冲字节流复制PDF文件总耗时:80 毫秒在这种情况下,我们可以看到,甚至于普通文件耗时是小于缓冲流,所以对于这种情况来说,缓冲流未必一定性能最好

5220

Java 进阶篇】Java响应输出字节数据

以下是一些常见情况,您可能需要输出字节数据: 文件下载: 当用户需要下载文件时,您可以读取文件字节数据并将其发送给客户端。...自定义数据格式: 如果您应用程序使用自定义二进制数据格式,您需要能够将这些数据以字节形式发送到客户端。 流式数据: 有时,数据可能是实时生成,而不是文件或数据库读取。...在这种情况下,您可以将数据以字节形式发送给客户端。 现在,让我们来看看如何Java实现这些功能。...结论 在Java Web应用程序,输出字节数据是一项重要任务,用于处理文件下载、图像显示、多媒体文件播放和流式数据传输等各种情况。...文件下载到图像显示,Java响应输出字节数据功能为Web开发提供了很大灵活性和功能。

46730

Spring MVC-10循序渐进之文件下载

概述 文件下载概览 隐藏资源 防止交叉引用 源码 概述 像静态资源,我们在浏览器打开正确URL即可下载,只要该资源不是放在WEB-INF目录下,Servlet/JSP容器就会将该资源发送到浏览器。...---- 文件下载概览 为了将像文件这样资源发送到浏览器,需要在控制器完成以下工作 1. 队请求处理方法使用void返回类型,并在方法添加HttpServletRespinse参数 2....,首先要读取该文件作为FileInputStream,并将内容加载到一个字节数组。...随后,获取HttpServletResponseOutputStream,并调用其write方法传入字节数组。 ---- 隐藏资源 ?...该示例演示如何向浏览器发送文件,由ResourceController类处理用户登录请求,并将WEB-INF/data目录下artisan.pdf发送给浏览器。

33240

Java程序员应该知道20个有用

许多应用程序需要提供在Excel中导出数据功能,如果必须Java应用程序执行相同操作,则需要Apache POI API。 ? 这是一个非常丰富库,允许你 Java程序读取和写入XLS文件。...Java应用程序读取Excel文件工作示例。...它是一个用于在Java编辑字节类库。ASM是另一个有用字节码编辑库。如果你不熟悉字节码,我建议你查看Introduction to Java Programmers以了解有关它更多信息。...PDF库 与Microsoft Excel类似,PDF库是另一种普遍存在格式。如果你需要在应用程序中支持PDF功能,例如 导出数据到PDF文件,则可以使用iText和Apache FOP库。...它通过提供特定类型映射,集合,列表和优先级队列来扩展Java集合框架,较小内存占用,快速访问和插入; 它还提供大型(64位)数组,集和列表,以及用于二进制和文本文件快速实用I / O类。

78830

PDF Explained(翻译)第三章 文件结构

459 //交叉引用表字节偏移量 %%EOF //文件结束标记 文件末尾向后读取trailer:找到文件结束标记, 提取交叉引用表字节偏移量,然后解析trailer字典。...线性化PDF 在网络环境查看大型PDF文件时,尤其是当网速较慢时, 用户不希望等待整个文件下载后再查看它。在Web浏览器查看文档时,这一点尤为重要。...如何PDF文件 要读取PDF文件,将其从一系列字节转换为内存“对象图”,通常有如下步骤: 文件开头读取PDF header,确认这确实是PDF文档并获取其版本号。...文件末尾逆向检索,找到文件结束标记。然后读取trailer字典以及交叉引用表开关位置字节偏移。 读取交叉引用表,获取每个对象在文件位置。...1至n,重新对对象进行编号,其中n是文件对象个数。 1号对象开始,逐个输出对象。记录每个对象字节偏移量,为后续写入交叉引用表作准备。 写入交叉引用表。

1.2K40

『互联网架构』软件架构-spring源码之spring结构概述(八)

spring07年接触到目前2018年也差不多10年了,一个java框架为什么能火这么多年。...第一次接触spring是在07年接触它java编程生涯一直在用spring,目前还没去过那个公司没用spring。...Spring 2.5主要新功能包括支持Java 6/Java EE 5,支持注释配置,classpath组件自动检测和兼容OSGibundle。...它是JSP2.1规范定义统一表达式语言扩展,支持set和get属性值、属性赋值、方法调用、访问数组集合及索引内容、逻辑算术运算、命名变量、通过名字Spring IoC容器检索对象,还支持列表投影...spring-webmvc-portlet模块(即Web-Portlet模块)提供了用于Portlet环境MVC实现,并反映了spring-webmvc模块功能。

80830

关于 Blob

Node 层返回二进制文件流字符串并下载文件 这里我利用 Blob 实现文件拆分再合并下载方法,算是第一次使用 我们最常见应该是 Blob URL 技术,文件上传预览、视频播放 src,均是采用这种技术实现...Blob(blobParts[, options]) 返回一个新创建 Blob 对象,其内容由参数给定数组串联组成 参数说明: blobParts:数组类型,数组每一项连接起来构成 Blob...blob 数组内容 MIME 类型 MIME 参考手册 endings:用于指定包含行结束符\n字符串如何被写入;可设置值:native、transparent;native:表示行结束符会被更改为适合宿主操作系统文件系统换行符...如果你传入是一个负数,那么这个偏移量将会数据末尾后到前开始计算 举例来说: -10 将会是 Blob 倒数第十个字节。...如果你传入了一个负数,那么这个偏移量将会数据末尾后到前开始计算 举例来说: -10 将会是 Blob 倒数第十个字节

2.6K10

Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解

3个注解);Spring可以使用扫描机制来找到应用程序中所有基于注解控制器类,为了保证Spring能找到你控制器,需要在配置文件声明组件扫描。...运行结果如下: 小结:代码与运行结果可以看出BarController与FooController同时都指定了一个视图foo/index.jsp,但是页面结果结果是不一样,从这里可以看出视图是被复用...用于类上,表示类所有响应请求方法都是以该地址作为父路径。...="true",修改后springmvc-servlet.xml文件如下: <!...——2018-10-24(程序猿节) 3、示例下载 点击下载示例 https://zhangguo5.coding.net/public/SpringMVCDemo/SpringMVCDemo/git

79720

关于编码那些事

前端页面上有一个下载文件功能,这个功能实现基本逻辑是:后台用Java API读取一个文件字节流 -> 用Java API将字节流转成Base64 encoded string -> 后台将这个string...之后用同样逻辑实现二进制文件pdf下载,结果下载下来文件不能打开。这是什么原因呢?...对于问题解释 回过头来解释上面遇到两个问题。 第一个问题,为什么xml文件下载没有问题,而pdf文件下载却是打开乱码呢?...第二个问题,当我在xml文件里加入中文字符以后,这些中文字符在下载下来文件也是乱码。这又是什么原因呢?...同样,我们先看正常显示和乱码显示文件十六进制视图对比(注:下图是正常显示文件,上图是乱码显示文件): ? 图上可以看出,字节e6被转成了utf-8对应码c3a6。

70420
领券