gpt4 book ai didi

java - 将输出流传递给javax.ws.rs.core.ResponseBuilder

转载 作者:行者123 更新时间:2023-12-01 18:22:50 24 4
gpt4 key购买 nike

我的问题是是否/如何将OutputStream传递给Jax-rs中的Response-Object。这是我当前设置的(非结构化)描述:
我有一个基于Java的REST服务(基于Java Jax-rs的resteasy实现)。使用Web浏览器可以访问该api,并且后端有一些发出OutputStream的服务。此OutputStream的结果以文件下载的形式提供。要将数据从OutputStream传输到浏览器,我将OutputStream的输出存储在文件系统中,然后使用ResponsBuilderStreamingOutput将数据传输到浏览器/用户。文件创建是我要避免的事情(真的没有特殊原因-我只是认为最好避免文件创建...)。这是将创建的文件传递给responsebuilder并随后将其删除的代码:

// <SNIP>
StreamingOutput fileStream = new StreamingOutput() {
@Override
public void write(OutputStream output) throws IOException, WebApplicationException {
try {
Files.copy(exportedFile.toPath(), output);
} catch (NoSuchFileException e) {
logger.error("An exception (NoSuchFile) occured. MESSAGE=" + e.getMessage());
}
finally {
Files.delete(exportedFile.toPath());
}
}
};

response = Response.ok( fileStream , MediaType.APPLICATION_OCTET_STREAM )
.header("content-disposition","attachment; filename = download.dat"))
.build();

return response;
// <SNIP>

最佳答案

当我以某种方式固定在一个听起来像“嘿,响应这是您的输出流。请把它传递给用户,不要忘记稍后关闭流”的解决方案上时,这样做似乎没有问题。

StreamingOutput fileStream = new StreamingOutput() {
@Override
public void write(OutputStream output) throws IOException, WebApplicationException {

myResult.write(output);
myResult.close();

}

};

关于java - 将输出流传递给javax.ws.rs.core.ResponseBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60276870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com