Skip to content
大纲

获取及更新文件元信息

文件元信息(Object Metadata),是对用户上传FOS的文件的属性描述,分为两种:HTTP标准属性(HTTP Headers)和User Meta(用户自定义元信息)。

获取文件元信息

通过 getObjectMetadata 方法可以只获取ObjectMetadata而不获取Object的实体。 如下代码所示:

java
ObjectMetadata objectMetadata = client.getObjectMetadata(bucketName, objectKey);
// 查看object元信息
System.out.println("contentType: " + objectMetadata.getContentType() + "\n" +
    "contentLength: " + objectMetadata.getContentLength() + "\n" +
    "contentMd5: " + objectMetadata.getContentMd5() + "\n" +
    "etag: " + objectMetadata.getETag() + "\n");

getObjectMetadata方法返回的解析类中可供调用的参数有:

参数说明
contentTypeObject的类型
contentLengthObject的大小
contentMd5Object的MD5
etagObject的HTTP协议实体标签
userMetadata如果在PutObject指定了userMetadata自定义meta,则返回此项
xIcCrc如果在PutObject指定了object的CRC值(循环冗余校验码),则返回此项

修改文件元信息

FOS修改Object的Metadata通过拷贝Object实现。即拷贝Object的时候,把目的Bucket设置为源Bucket,目的Object设置为源Object,并设置新的Metadata,通过拷贝自身实现修改Metadata的目的。如果不设置新的Metadata,则报错。

java
public void setObjectMeta(FosClient client, String bucketName, String objectKey, ObjectMetadata newObjectMetadata) {
      CopyObjectRequest request = new CopyObjectRequest(bucketName, objectKey, bucketName, objectKey);
      // 设置新的ObjectMetadata
      request.setNewObjectMetadata(newObjectMetadata);
      // 拷贝Object
      CopyObjectResponse copyObjectResponse = client.copyObject(request);
      // 打印结果
      System.out.println("ETag: " + copyObjectResponse.getETag() + " LastModified: " + copyObjectResponse.getLastModified());
  }