OSS对象存储的文件追加上传问题及解决方案

最近项目中碰到这样一个问题,在我们软件的版本更新中的更新日志,需要每次更新的内容对同一个文件进行追加。然后我看了下阿里云的文档是这样写的,地址https://help.aliyun.com/document_detail/84784.html?spm=a2c4g.11186623.4.2.23fc2201CSZFks
OSS对象存储的文件追加上传问题及解决方案_第1张图片
详情大家可以去上面链接查看。
接下来讲讲问题:当你这个文件是空的,也就是说你这个文件OKB时,执行这个没有任何问题,可以追加上去,因为文件长度确实是0.
在这里插入图片描述

当你第二次再追加是,你会发现,它会给你抛异常,意思是说文件长度和文件位置不相等
在这里插入图片描述
怎么解决呢?
我也琢磨了半天,查文档,发现并没有。因为官方例子中很明确告诉我们第二次之后的追加需要提供Position长度,问题是怎么拿到这个文件长度呢?
OSS对象存储的文件追加上传问题及解决方案_第2张图片
终于,在官方jar中找到提供了一个OSSObject 这个实体类,里面存放着文件内容流
OSS对象存储的文件追加上传问题及解决方案_第3张图片
以下便是
OSS对象存储的文件追加上传问题及解决方案_第4张图片

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();
        }

搞定!!!

你可能感兴趣的:(java,阿里云,spring)