You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala使用http4s+fs2文件上传:读字符串仅一行,读字节正常的原因

问题原因与修复方案

问题根源

你处理data部分时犯了一个关键错误:utf8.decode只是把整个字节流解码成单个完整字符串,并不会按行分割内容。所以dataLineStream.compile.toList得到的是只有1个元素的列表(对应整个文件的完整内容),自然统计行数时只显示1行。

修复方法

要实现按行读取,需要用fs2的lines转换器(需导入fs2.text包),它会自动把解码后的字符串按换行符(包括\n、\r\n等格式)分割成多行流。修改代码中dataLineStream的定义即可:

// 先导入fs2.text包
import fs2.text._

// 替换原来的dataLineStream定义
val dataLineStream = datapart.body.through(utf8.decode).through(lines)

这样dataLineStream就变成了每行字符串组成的流,compile.toList会得到所有行的列表,统计行数的结果就正确了。

另外补充:你写的templateByteStream可以简化成templatePart.body,不需要额外的for推导式,功能完全一致,只是代码更简洁。

内容的提问来源于stack exchange,提问作者Dexter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 14:54:08