Return RestExpress 响应中的一个文件

Return a file in RestExpress response

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

我能够使用 Unpooled Netty 缓冲区实现此功能。如果您使用的是 Netty 3.10 或更早版本,您可能希望使用 ChannelBuffers 而不是 Pool class。在 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);