对象存储部分元数据介绍

20 篇文章 0 订阅

概述

本文主要介绍对象存储部分metadata。
欢迎交流沟通ceph和对象存储相关知识

自定义元数据x-amz-meta-*

使用自定义元数据时,需要注意自定义元数据大小限制为2KB
元数据中的key 不能包含中文字符;value可以包含中文(中文与时间格式都需要进行转码)

metadata.addUserMetadata(fileName,urlencode("中文文件名"))
metadata.addUserMetadata(createTime,urlencode(datetime))

Content-Length

对象消息体长度,一般用来在上传前定义为file.length,用来做传输过程中的完整性校验。
有些版本sdk中,如果没有添加Content-Length,会出现告警

No content length special for stream data. Stream contents will be buffered in memory and could result in out of memory errors

告警本身不影响上传,是提示流内容会缓存在内存中,可能会导致内存不足的情况出现。

InputStream in = new FileInputStream(s3file);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(s3file.length());

Content-Type

对象实体类型,在对象存储中,很多时候会用到预签名url或者publicacl对象的访问链接,该元数据会影响浏览器行为。浏览器会根据该值来判断以何种形式处理目标文件,如果指定对象元数据中的content-type与对象本身的媒体类型一致,则浏览器会以直接预览形式处理(需要浏览器支持这种格式,部分媒体类型可能需要插件支持 ),如果不指定,默认以文件流形式处理(直接下载)。

ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(contentType);
PutObjectRequest putRequest = new PutObjectRequest(bucketName, fileObjKeyName, file);
putRequest.setMetadata(metadata);

一般流式格式为"application/octet-stream",对应url浏览器会直接执行下载。
常用媒体类型需要直接在线预览对应如下格式:

.txt文本contentType=“text/plain”
.jpg图片contentType=“image/jpeg”
.mp3音频contentType=“audio/mp3”
.mp4视频contentType=“video/mp4”

其余类型可以网上查询,使用s3browser windows上传时,会自动将content-type更改为合适的媒体类型。

Last-Modified

最后更新时间,对象存储中,该值一般为对象落到存储中的时间,即为上传时间,如果发生过追加写,则为最后一次追加写的时间。一般用来校验对象是否被后续更新过

x-amz-version-id

对象version-id,开启多版本时,当重复上传同key对象时,老的对象不会被覆盖,而是移除current标识,每个老对象都有一个对应的version-id。

当执行默认简单接口时(putobject,deleteobject,getobject)等不带version后缀的接口方法时,访问的对象为current对象,即当前对象,而使用如(getobjectversion)等接口时,可以在接口中添加一个参数version,getobject(objectkey,bucketname,versionid),从而来访问历史版本对象。当多版本误删文件时,也可以使用copyobject接口来将历史某个version对象copy为当前版本进行恢复,从而实现类似防误删的功能。

ETag

资源标识符,在对象存储中

  • 如果是整体上传,该对象Etag即为对象的md5值,而分段上传时,计算方法略有不同

  • 分段上传时,Etag计算方法不同
    1、计算每个分段的md5 digest
    2、拼接每个分段的md5 digest
    3、将拼接好的md5 digest计算md5,得到其md5的十六进制的字符串即为分段对象的Etag

Content-Md5

Md5校验值,可以用来设置此值来进行传输校验,如果设置了该值,当服务器接收到对象的该值与用户设置的一致时,才会上传成功。
注意Conent-Md5并非对象的直接md5值,而是需要bash64转码计算后的值。

    content_md5 = hashlib.md5()
    content_md5.update(s3file)
    content_bash64 = base64.b64encode(content_md5.digest())
    return content_base64.decode("utf-8")

注:Content-Length、Etag、Content-Md5是常用的用来做传输校验和确认的元数据。过多校验可能会导致增加上传时耗,可根据需求自行选用。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值