文件元信息(Object Meta)包括HTTP header和自定义元信息。
说明 有关文件元信息的更多详情,请参见开发指南中的
文件元信息。
设置文件元信息
以下为设置HTTP header和自定义元信息的详细示例。
- 设置HTTP header
以下代码用于设置HTTP header:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String content = "Hello OSS"; // 创建上传文件的元信息,可以通过文件元信息设置HTTP header。 ObjectMetadata meta = new ObjectMetadata(); String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(content.getBytes())); // 开启文件内容MD5校验。开启后OSS会把您提供的MD5与文件的MD5比较,不一致则抛出异常。 meta.setContentMD5(md5); // 指定上传的内容类型。内容类型决定浏览器将以什么形式、什么编码读取文件。如果没有指定则根据文件的扩展名生成,如果没有扩展名则为默认值application/octet-stream。 meta.setContentType("text/plain"); // 设置内容被下载时的名称。 meta.setContentDisposition("attachment; filename=\"DownloadFilename\""); // 设置上传文件的长度。如超过此长度,则上传文件会被截断,上传的文件长度为设置的长度。如小于此长度,则为上传文件的实际长度。 meta.setContentLength(content.length()); // 设置内容被下载时网页的缓存行为。 meta.setCacheControl("Download Action"); // 设置缓存过期时间,格式是格林威治时间(GMT)。 meta.setExpirationTime(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z")); // 设置内容被下载时的编码格式。 meta.setContentEncoding("utf-8"); // 设置header。 meta.setHeader("<yourHeader>", "<yourHeaderValue>"); // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 上传文件。 ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()), meta); // 关闭OSSClient。 ossClient.shutdown();
HTTP header详情请参见RFC2616。
- 设置自定义元信息
您可以自定义文件的元信息来对文件进行描述。
以下代码用于设置文件的自定义元信息:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String content = "Hello OSS"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 创建文件元信息。 ObjectMetadata meta = new ObjectMetadata(); // 设置自定义元信息property值为property-value。建议使用Base64编码。 meta.addUserMetadata("property", "property-value"); // 上传文件。 ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()), meta); // 获取文件元信息。 ossClient.getObjectMetadata("<yourBucketName>", "<yourObjectName>"); // 关闭OSSClient。 ossClient.shutdown();
下载文件时,文件元信息也会同时下载。 一个文件可以有多个元信息,总大小不能超过8 KB。
修改文件元信息
以下代码用于修改文件的元信息:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String sourceBucketName = "<yourSourceBucketName>"; String sourceObjectName = "<yourSourceObjectName>"; String destinationBucketName = "<yourDestinationBucketName>"; String destinationObjectName = "<yourDestinationObjectName>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,accessKeySecret); // 设置源文件与目标文件相同,调用ossClient.copyObject方法修改文件元信息。 CopyObjectRequest request = new CopyObjectRequest(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName); ObjectMetadata meta = new ObjectMetadata(); // 指定上传的内容类型。内容类型决定浏览器将以什么形式、什么编码读取文件。如果没有指定则根据文件的扩展名生成,如果没有扩展名则为默认值application/octet-stream。 meta.setContentType("text/plain"); // 设置内容被下载时的名称。 meta.setContentDisposition("Download File Name"); // 设置内容被下载时网页的缓存行为。 meta.setCacheControl("Download Action"); // 设置缓存过期时间,格式是格林威治时间(GMT)。 meta.setExpirationTime(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z")); // 设置内容被下载时的编码格式。 meta.setContentEncoding("utf-8"); // 设置header。 meta.setHeader("<yourHeader>", "<yourHeaderValue>"); // 设置自定义元信息property值为property-value。 meta.addUserMetadata("property", "property-value"); request.setNewObjectMetadata(meta); // 修改元信息。 ossClient.copyObject(request); // 关闭OSSClient。 ossClient.shutdown();
获取文件元信息
您可以通过以下两种方法获取文件元信息:
方法 | 描述 | 优势 |
---|---|---|
ossClient.getSimplifiedObjectMeta | 获取文件的ETag、Size(文件大小)、 LastModified(最后修改时间)。 | 更轻量、更快 |
ossClient.getObjectMetadata | 获取文件的全部元信息。 | 无 |
以下代码用于获取文件元信息:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 获取文件的部分元信息。 SimplifiedObjectMeta objectMeta = ossClient.getSimplifiedObjectMeta("<yourBucketName>", "<yourObjectName>"); System.out.println(objectMeta.getSize()); System.out.println(objectMeta.getETag()); System.out.println(objectMeta.getLastModified()); // 获取文件的全部元信息。 ObjectMetadata metadata = ossClient.getObjectMetadata("<yourBucketName>", "<yourObjectName>"); System.out.println(metadata.getContentType()); System.out.println(metadata.getLastModified()); System.out.println(metadata.getExpirationTime()); // 关闭OSSClient。 ossClient.shutdown();