在RestExpress响应中返回一个文件

时间:2017-03-07 16:28:32

标签: java resteasy

我使用RestExpress创建REST API。我有一种情况,我应该在响应中返回一个pdf文件,以便最终用户能够下载它。 我知道这可以通过Servlets实现,但RestExpress有自己的Response对象,并且它没有支持response.getOutputStream()函数。如何使用RestExpress Response对象实现此功能?

1 个答案:

答案 0 :(得分:1)

我能够使用Unpooled Netty缓冲区实现此功能。如果您使用的是Netty 3.10或更早版本,则可能需要使用ChannelBuffers而不是Pool类。在Netty 4.0 / 4.1中,ChannelBuffers已被Unpooled取代。

以下是示例代码:

import io.netty.buffer.Unpooled;
import java.nio.file.Files;
import java.nio.file.Paths;

response.setContentType("application/pdf"); //Setting content type to be pdf
response.addHeader("Content-disposition", "attachment; filename=" + outputFileAddress);
LOG.info(outputFileAddress);       
java.nio.file.Path path = Paths.get(outputFileAddress);
byte[] data = Files.readAllBytes(path);
response.setBody(Unpooled.wrappedBuffer(data));
response.noSerialization(); // No serialization avoids getting the stream to Jackson
response.setResponseStatus(HttpResponseStatus.OK);