最近项目中碰到这样一个问题,在我们软件的版本更新中的更新日志,需要每次更新的内容对同一个文件进行追加。然后我看了下阿里云的文档是这样写的,地址https://help.aliyun.com/document_detail/84784.html?spm=a2c4g.11186623.4.2.23fc2201CSZFks
详情大家可以去上面链接查看。
接下来讲讲问题:当你这个文件是空的,也就是说你这个文件OKB时,执行这个没有任何问题,可以追加上去,因为文件长度确实是0.
当你第二次再追加是,你会发现,它会给你抛异常,意思是说文件长度和文件位置不相等
怎么解决呢?
我也琢磨了半天,查文档,发现并没有。因为官方例子中很明确告诉我们第二次之后的追加需要提供Position长度,问题是怎么拿到这个文件长度呢?
终于,在官方jar中找到提供了一个OSSObject 这个实体类,里面存放着文件内容流
以下便是
OSSObject ossObject = ossClient.getObject("bucketName", "key");
InputStream inputStream = ossObject.getObjectContent();
int ww;
try {
ww = inputStream.available();
appendObjectRequest.setInputStream(new ByteArrayInputStream(content1.getBytes()));
appendObjectRequest.setPosition((long)ww);
AppendObjectResult appendObjectResult = ossClient.appendObject(appendObjectRequest);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
搞定!!!