我正在使用springwebflux上传文件。在我的情况下,我必须上传一个csv文件。通过我所做的搜索,我可以收集到以下代码:
public Flux<String> getLines(Flux<FilePart> filePartFlux) {
return filePartFlux.flatMap(filePart ->
filePart.content().map(dataBuffer -> {
byte[] bytes = new byte[dataBuffer.readableByteCount()];
dataBuffer.read(bytes);
DataBufferUtils.release(dataBuffer);
return new String(bytes, StandardCharsets.UTF_8);
})
.map(this::processAndGetLinesAsList)
.flatMapIterable(Function.identity());
}
但在此过程中,如果databuffer达到其容量,它将部分读取最后一行,因此如果我传递半个值,将处理不正确的csv。有没有什么方法可以让我确定文件是逐行读取的而不是通量。
示例:从通量发射的数据缓冲器1包含:
<name,title,address
joe,engineer,straight way california,
mike,doc >
来自flux的数据缓冲器2包含:
<tor,hatlway street,
jeremy,plumber,newyork>
我目前想到的解决方案是维护一个堆栈,通过比较csv拆分的头长度和拆分的当前记录长度来推送不完整的记录,如果较少,则从堆栈中弹出emelemt并连接两个字符串。我希望有一个有效的方法来做这一切。
暂无答案!
目前还没有任何答案,快来回答吧!