这两天在做一个上传文件到oss,然后从oss获取文件发送邮件的case。
然后发现文件上传到了oss,但是取出来之后邮件的附件是空的。
找了半天也没有发现,之后通过日志发现他们的长度是不同的。
写了个测试demo
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
public class TestInputStream {
@Test
public void demo(){
try{
// 创建一个InputStream
InputStream inputStream = new ByteArrayInputStream(IOUtils.toByteArray("aaaaa"));
System.out.println(IOUtils.toByteArray(inputStream).length);
// 再次打印
System.out.println(IOUtils.toByteArray(inputStream).length);
}catch (Exception e){
e.printStackTrace();
}
}
}
输出发现不同。很坑 真的坑!!
有人这样比喻,

在处理文件上传到OSS并从OSS获取发送邮件的过程中,遇到附件为空的异常。经排查,发现InputStream的内容长度与原始文件不一致。通过测试发现InputStream不能被重复读取,因为其内部存在pos指针,一旦读取后,指针位置改变,导致无法再次读取数据。这就像水杯中的水,一旦倒出,水杯便不再有水。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



