gpt4 book ai didi

java - 在 Play Framework 中通过 HTTP 服务后删除文件 - java

转载 作者:行者123 更新时间:2023-12-05 06:36:49 24 4
gpt4 key购买 nike

如何在通过 http 服务后删除文件,

        Files.TemporaryFile file = null;
try {
file = new Files.TemporaryFile(f);

return ok().sendFile(file.file());
} catch (IllegalArgumentException e) {
return badRequest(Json.newObject().put("message", e.getMessage()));
} finally {
file.clean();
}

使用此代码,文件在提供之前被删除。我在客户端收到一个空文件。

最佳答案

2.8 版本的 Play 框架应该在 Java 中的 sendFile 方法中支持 onClose 参数(目前似乎只在 Scala 版本中支持)。

在旧版本中(我只在 2.7.x 上尝试过)您可以应用与 2.8 修复中相同的方法,因此:

public Result doSomething() {
final File fileToReturn = ....;
final Source<ByteString, CompletionStage<IOResult>> source = FileIO.fromFile(fileToReturn);

return Results.ok().streamed(wrap(source, () -> fileToReturn.delete()), Optional.of(fileToReturn.length()), Optional.of("content type, e.g. application/zip"));
}

private Source<ByteString, CompletionStage<IOResult>> wrap(final Source<ByteString, CompletionStage<IOResult>> source, final Runnable handler) {
return source.mapMaterializedValue(
action -> action.whenCompleteAsync((ioResult, exception) -> handler.run())
);
}

关于java - 在 Play Framework 中通过 HTTP 服务后删除文件 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48795243/

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