上传对象(追加写)

PutObject可以对桶中的一个对象进行追加写操作,如果该对象已经存在,执行该操作则向文件末尾追加内容,否则将创建对象。

通过Append操作创建的Object类型为Appendable,而通过PutObject操作上传的Object的类型是Normal。对Appendable类型的对象进行普通上传操作之后会覆盖原有对象的内容并且将其类型设置为Normal。

Append操作仅可以在未开启版本控制的桶中执行,如果桶的版本控制状态为启用(Enabled)或者暂停(Suspended)状态将不支持Append操作。以下代码展示如果使用PutObject进行追加写操作:

public void putObjectAppend() throws AmazonServiceException {
    System.out.println("putObjectAppend");
	String key = "ExampleObject.txt";

    long contentLength = 0;
    try {
        // 获取原始文件长度,也可以使用业务自己的接口获取
        ObjectMetadata meta = s3Client.getObjectMetadata(bucket, key);
        contentLength = meta.getContentLength();
    } catch (AmazonServiceException e){

    }

    String content = "123";
    byte[] contentBytes = content.getBytes();
    InputStream is = new ByteArrayInputStream(contentBytes);
    ObjectMetadata metadata = new ObjectMetadata();
    metadata.setContentType("text/plain");

    AppendObjectRequest req = new AppendObjectRequest(bucket, key, is, metadata);
    req.setPosition(contentLength);
    s3Client.appendObject(req);
    System.out.println("putObjectAppend success");
}

PutObject中可设置的参数如下:

参数 说明 是否必须
bucket 桶名称
key 对象名称
position 追加前对象大小

返回码:

状态码 状态说明 描述
409 PositionNotEqualToLength 请求参数中position的值与对象追加前的大小不一致
409 ObjectNotAppendable 对象类型不支持追加写操作
409 InvalidBucketstate 桶版本控制设置为enabled或suspended

注意:本接口只在官网的sdk提供,AWS S3没有此接口。