为什么我的 Spring webflux 应用程序会在每次请求时生成临时文件?
Why my Spring webflux application makes temp file on every request?
为什么spring webflux(或java nio)制作multipartData DataBuffer tmp文件?
就我而言,在 macOS 上,像 /private/var/folders/v6/vtrxqpbd4lb3pq8v_sbm10hc0000gn/T/nio-file-upload/nio-body-1-82f11dbe-61b3-4e5d-8c43-92e02aa38481.tmp
这样的文件应要求创建然后删除。
是否可以通过防止磁盘写入来提高性能?
这是我的代码:
public class FileHandler {
public Mono<ServerResponse> postFile(ServerRequest req) {
val file = req.multipartData()
.map(map -> map.getFirst("file"))
.ofType(FilePart.class);
val buffer = file.flatMap(part -> part.content().next());
val hash = buffer.map(d -> {
try {
val md = MessageDigest.getInstance("SHA-1");
md.update(d.asByteBuffer());
return Base64Utils.encodeToString(md.digest());
} catch (NoSuchAlgorithmException e) {
// does not reach here!
return "";
}
});
val name = file.map(FilePart::filename);
return ok().body(hash, String.class);
}
}
multipart file support in Spring WebFlux is using the Synchronoss NIO Multipart library。该实现的缺点是它不是完全反应式的,因此它可以创建临时文件而不是将整个内容加载到内存中。
是什么让您认为此行为是性能问题?您是否有样本或基准测试结果表明这是一个问题?
Spring Framework 团队已经着手解决此问题,Spring Framework 5.2 中将默认提供完全反应式的实现(参见 spring-framework#21659)。
为什么spring webflux(或java nio)制作multipartData DataBuffer tmp文件?
就我而言,在 macOS 上,像 /private/var/folders/v6/vtrxqpbd4lb3pq8v_sbm10hc0000gn/T/nio-file-upload/nio-body-1-82f11dbe-61b3-4e5d-8c43-92e02aa38481.tmp
这样的文件应要求创建然后删除。
是否可以通过防止磁盘写入来提高性能?
这是我的代码:
public class FileHandler {
public Mono<ServerResponse> postFile(ServerRequest req) {
val file = req.multipartData()
.map(map -> map.getFirst("file"))
.ofType(FilePart.class);
val buffer = file.flatMap(part -> part.content().next());
val hash = buffer.map(d -> {
try {
val md = MessageDigest.getInstance("SHA-1");
md.update(d.asByteBuffer());
return Base64Utils.encodeToString(md.digest());
} catch (NoSuchAlgorithmException e) {
// does not reach here!
return "";
}
});
val name = file.map(FilePart::filename);
return ok().body(hash, String.class);
}
}
multipart file support in Spring WebFlux is using the Synchronoss NIO Multipart library。该实现的缺点是它不是完全反应式的,因此它可以创建临时文件而不是将整个内容加载到内存中。
是什么让您认为此行为是性能问题?您是否有样本或基准测试结果表明这是一个问题?
Spring Framework 团队已经着手解决此问题,Spring Framework 5.2 中将默认提供完全反应式的实现(参见 spring-framework#21659)。