• 关于 对象存储 OSS设置生命周期规则 的搜索结果

问题

OSS-功能概览

青衫无名 2019-12-01 21:34:25 831 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 您可以通过控制台定义和管理存储空间内所有对象或对象的某个子集(通过指定关键词名称前缀)的生命周期。设置生命周期一般用于文件的批量管理和自动碎片删除等操作。 对于规则匹配的对象,系统会保证在生效日期两日内将数据清除或转换为其他存储类型。 应用生命周期规则而批量删除的数据将无法恢复,请谨慎配置该规则。 操作步骤 进入OSS管理控制台界面。 在左侧存储空间列表中,单击目标存储空间名称,打开该存储空间概览页面。 单击基础设置页签,找到生命周期区域,然后单击设置。 单击创建规则,打开生命周期创建规则对话框。 配置生命周期规则。 状态:指定本条规则的状态,分别表示启用该规则和停用该规则。 策略:选择匹配对象策略,可以选择按前缀配置(按照对象名称前缀匹配),也可以选择配置到整个Bucket(直接匹配到整个存储空间)。 前缀:如果策略选择了按前缀配置,则需要输入对象名称的前缀。假设您在存储空间中存储了图片对象,这些对象使用img/作为名称前缀,要对这些文件进行生命周期管理,则在此键入img/。 删除文件 过期天数:设置对象文件保留天数,以该文件最后修改时间的天数为起始计算,超过设定天数时即执行规则进行删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为30天,最后修改日期为2016-1-1的对象会在2016年1月31号被后端程序扫描删除或转换为其他存储类型。设置项包括: 文件保留指定天数后转换到低频访问 文件保留指定天数后转换到归档冷备 文件保留指定天数后删除 过期日期:将最后修改时间为指定日期之前的所有文件删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为2012-12-21,最后修改日期为2012-12-21之前的对象会被后端程序扫描删除或转换为其他存储类型。设置项包括: 转换指定日期之前的文件到低频访问 转换指定日期之前的文件到归档冷备 删除指定日期之前的文件 不启用:不启用文件自动删除或转换存储类型的功能。 删除碎片 过期日期:删除初始化时间为指定日期之前的所有分块上传事件。如设置时间为2012-12-21,在2012-12-21之前初始化的分块上传事件会被后端程序扫描删除。 过期天数:设置分块上传事件保留天数,以该事件初始化时为起始计算,超过设定天数时即执行规则进行删除。如设置时间为30天,在2016-1-1初始化的分块上传事件会在1 月31号被后端程序扫描删除。 不启用:不启用碎片自动删除功能。 单击确定。 说明 规则保存成功后,您可以在策略列表中查看已设置的生命周期规则,并进行相应的编辑或者删除操作。

2019-12-01 23:13:11 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 您可以通过控制台定义和管理存储空间内所有对象或对象的某个子集(通过指定关键词名称前缀)的生命周期。设置生命周期一般用于文件的批量管理和自动碎片删除等操作。 对于规则匹配的对象,系统会保证在生效日期两日内将数据清除或转换为其他存储类型。 应用生命周期规则而批量删除的数据将无法恢复,请谨慎配置该规则。 操作步骤 进入OSS管理控制台界面。 在左侧存储空间列表中,单击目标存储空间名称,打开该存储空间概览页面。 单击基础设置页签,找到生命周期区域,然后单击设置。 单击创建规则,打开生命周期创建规则对话框。 配置生命周期规则。 状态:指定本条规则的状态,分别表示启用该规则和停用该规则。 策略:选择匹配对象策略,可以选择按前缀配置(按照对象名称前缀匹配),也可以选择配置到整个Bucket(直接匹配到整个存储空间)。 前缀:如果策略选择了按前缀配置,则需要输入对象名称的前缀。假设您在存储空间中存储了图片对象,这些对象使用img/作为名称前缀,要对这些文件进行生命周期管理,则在此键入img/。 删除文件 过期天数:设置对象文件保留天数,以该文件最后修改时间的天数为起始计算,超过设定天数时即执行规则进行删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为30天,最后修改日期为2016-1-1的对象会在2016年1月31号被后端程序扫描删除或转换为其他存储类型。设置项包括: 文件保留指定天数后转换到低频访问 文件保留指定天数后转换到归档冷备 文件保留指定天数后删除 过期日期:将最后修改时间为指定日期之前的所有文件删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为2012-12-21,最后修改日期为2012-12-21之前的对象会被后端程序扫描删除或转换为其他存储类型。设置项包括: 转换指定日期之前的文件到低频访问 转换指定日期之前的文件到归档冷备 删除指定日期之前的文件 不启用:不启用文件自动删除或转换存储类型的功能。 删除碎片 过期日期:删除初始化时间为指定日期之前的所有分块上传事件。如设置时间为2012-12-21,在2012-12-21之前初始化的分块上传事件会被后端程序扫描删除。 过期天数:设置分块上传事件保留天数,以该事件初始化时为起始计算,超过设定天数时即执行规则进行删除。如设置时间为30天,在2016-1-1初始化的分块上传事件会在1 月31号被后端程序扫描删除。 不启用:不启用碎片自动删除功能。 单击确定。 说明 规则保存成功后,您可以在策略列表中查看已设置的生命周期规则,并进行相应的编辑或者删除操作。

2019-12-01 23:13:11 0 浏览量 回答数 0

消息队列 RocketMQ 9.9元包月起

消息队列 RocketMQ 9.9元包月起,另含2000万次API 免费调用额度

回答

详细解答可以参考官方帮助文档 您可以通过控制台定义和管理存储空间内所有对象或对象的某个子集(通过指定关键词名称前缀)的生命周期。设置生命周期一般用于文件的批量管理和自动碎片删除等操作。 对于规则匹配的对象,系统会保证在生效日期两日内将数据清除或转换为其他存储类型。 应用生命周期规则而批量删除的数据将无法恢复,请谨慎配置该规则。 操作步骤 进入OSS管理控制台界面。 在左侧存储空间列表中,单击目标存储空间名称,打开该存储空间概览页面。 单击基础设置页签,找到生命周期区域,然后单击设置。 单击创建规则,打开生命周期创建规则对话框。 配置生命周期规则。 状态:指定本条规则的状态,分别表示启用该规则和停用该规则。 策略:选择匹配对象策略,可以选择按前缀配置(按照对象名称前缀匹配),也可以选择配置到整个Bucket(直接匹配到整个存储空间)。 前缀:如果策略选择了按前缀配置,则需要输入对象名称的前缀。假设您在存储空间中存储了图片对象,这些对象使用img/作为名称前缀,要对这些文件进行生命周期管理,则在此键入img/。 删除文件 过期天数:设置对象文件保留天数,以该文件最后修改时间的天数为起始计算,超过设定天数时即执行规则进行删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为30天,最后修改日期为2016-1-1的对象会在2016年1月31号被后端程序扫描删除或转换为其他存储类型。设置项包括: 文件保留指定天数后转换到低频访问 文件保留指定天数后转换到归档冷备 文件保留指定天数后删除 过期日期:将最后修改时间为指定日期之前的所有文件删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为2012-12-21,最后修改日期为2012-12-21之前的对象会被后端程序扫描删除或转换为其他存储类型。设置项包括: 转换指定日期之前的文件到低频访问 转换指定日期之前的文件到归档冷备 删除指定日期之前的文件 不启用:不启用文件自动删除或转换存储类型的功能。 删除碎片 过期日期:删除初始化时间为指定日期之前的所有分块上传事件。如设置时间为2012-12-21,在2012-12-21之前初始化的分块上传事件会被后端程序扫描删除。 过期天数:设置分块上传事件保留天数,以该事件初始化时为起始计算,超过设定天数时即执行规则进行删除。如设置时间为30天,在2016-1-1初始化的分块上传事件会在1 月31号被后端程序扫描删除。 不启用:不启用碎片自动删除功能。 单击确定。 说明 规则保存成功后,您可以在策略列表中查看已设置的生命周期规则,并进行相应的编辑或者删除操作。

2019-12-01 23:13:11 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 您可以通过控制台定义和管理存储空间内所有对象或对象的某个子集(通过指定关键词名称前缀)的生命周期。设置生命周期一般用于文件的批量管理和自动碎片删除等操作。 对于规则匹配的对象,系统会保证在生效日期两日内将数据清除或转换为其他存储类型。 应用生命周期规则而批量删除的数据将无法恢复,请谨慎配置该规则。 操作步骤 进入OSS管理控制台界面。 在左侧存储空间列表中,单击目标存储空间名称,打开该存储空间概览页面。 单击基础设置页签,找到生命周期区域,然后单击设置。 单击创建规则,打开生命周期创建规则对话框。 配置生命周期规则。 状态:指定本条规则的状态,分别表示启用该规则和停用该规则。 策略:选择匹配对象策略,可以选择按前缀配置(按照对象名称前缀匹配),也可以选择配置到整个Bucket(直接匹配到整个存储空间)。 前缀:如果策略选择了按前缀配置,则需要输入对象名称的前缀。假设您在存储空间中存储了图片对象,这些对象使用img/作为名称前缀,要对这些文件进行生命周期管理,则在此键入img/。 删除文件 过期天数:设置对象文件保留天数,以该文件最后修改时间的天数为起始计算,超过设定天数时即执行规则进行删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为30天,最后修改日期为2016-1-1的对象会在2016年1月31号被后端程序扫描删除或转换为其他存储类型。设置项包括: 文件保留指定天数后转换到低频访问 文件保留指定天数后转换到归档冷备 文件保留指定天数后删除 过期日期:将最后修改时间为指定日期之前的所有文件删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为2012-12-21,最后修改日期为2012-12-21之前的对象会被后端程序扫描删除或转换为其他存储类型。设置项包括: 转换指定日期之前的文件到低频访问 转换指定日期之前的文件到归档冷备 删除指定日期之前的文件 不启用:不启用文件自动删除或转换存储类型的功能。 删除碎片 过期日期:删除初始化时间为指定日期之前的所有分块上传事件。如设置时间为2012-12-21,在2012-12-21之前初始化的分块上传事件会被后端程序扫描删除。 过期天数:设置分块上传事件保留天数,以该事件初始化时为起始计算,超过设定天数时即执行规则进行删除。如设置时间为30天,在2016-1-1初始化的分块上传事件会在1 月31号被后端程序扫描删除。 不启用:不启用碎片自动删除功能。 单击确定。 说明 规则保存成功后,您可以在策略列表中查看已设置的生命周期规则,并进行相应的编辑或者删除操作。

2019-12-01 23:13:12 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 您可以通过控制台定义和管理存储空间内所有对象或对象的某个子集(通过指定关键词名称前缀)的生命周期。设置生命周期一般用于文件的批量管理和自动碎片删除等操作。 对于规则匹配的对象,系统会保证在生效日期两日内将数据清除或转换为其他存储类型。 应用生命周期规则而批量删除的数据将无法恢复,请谨慎配置该规则。 操作步骤 进入OSS管理控制台界面。 在左侧存储空间列表中,单击目标存储空间名称,打开该存储空间概览页面。 单击基础设置页签,找到生命周期区域,然后单击设置。 单击创建规则,打开生命周期创建规则对话框。 配置生命周期规则。 状态:指定本条规则的状态,分别表示启用该规则和停用该规则。 策略:选择匹配对象策略,可以选择按前缀配置(按照对象名称前缀匹配),也可以选择配置到整个Bucket(直接匹配到整个存储空间)。 前缀:如果策略选择了按前缀配置,则需要输入对象名称的前缀。假设您在存储空间中存储了图片对象,这些对象使用img/作为名称前缀,要对这些文件进行生命周期管理,则在此键入img/。 删除文件 过期天数:设置对象文件保留天数,以该文件最后修改时间的天数为起始计算,超过设定天数时即执行规则进行删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为30天,最后修改日期为2016-1-1的对象会在2016年1月31号被后端程序扫描删除或转换为其他存储类型。设置项包括: 文件保留指定天数后转换到低频访问 文件保留指定天数后转换到归档冷备 文件保留指定天数后删除 过期日期:将最后修改时间为指定日期之前的所有文件删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为2012-12-21,最后修改日期为2012-12-21之前的对象会被后端程序扫描删除或转换为其他存储类型。设置项包括: 转换指定日期之前的文件到低频访问 转换指定日期之前的文件到归档冷备 删除指定日期之前的文件 不启用:不启用文件自动删除或转换存储类型的功能。 删除碎片 过期日期:删除初始化时间为指定日期之前的所有分块上传事件。如设置时间为2012-12-21,在2012-12-21之前初始化的分块上传事件会被后端程序扫描删除。 过期天数:设置分块上传事件保留天数,以该事件初始化时为起始计算,超过设定天数时即执行规则进行删除。如设置时间为30天,在2016-1-1初始化的分块上传事件会在1 月31号被后端程序扫描删除。 不启用:不启用碎片自动删除功能。 单击确定。 说明 规则保存成功后,您可以在策略列表中查看已设置的生命周期规则,并进行相应的编辑或者删除操作。

2019-12-01 23:13:11 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 您可以通过控制台定义和管理存储空间内所有对象或对象的某个子集(通过指定关键词名称前缀)的生命周期。设置生命周期一般用于文件的批量管理和自动碎片删除等操作。 对于规则匹配的对象,系统会保证在生效日期两日内将数据清除或转换为其他存储类型。 应用生命周期规则而批量删除的数据将无法恢复,请谨慎配置该规则。 操作步骤 进入OSS管理控制台界面。 在左侧存储空间列表中,单击目标存储空间名称,打开该存储空间概览页面。 单击基础设置页签,找到生命周期区域,然后单击设置。 单击创建规则,打开生命周期创建规则对话框。 配置生命周期规则。 状态:指定本条规则的状态,分别表示启用该规则和停用该规则。 策略:选择匹配对象策略,可以选择按前缀配置(按照对象名称前缀匹配),也可以选择配置到整个Bucket(直接匹配到整个存储空间)。 前缀:如果策略选择了按前缀配置,则需要输入对象名称的前缀。假设您在存储空间中存储了图片对象,这些对象使用img/作为名称前缀,要对这些文件进行生命周期管理,则在此键入img/。 删除文件 过期天数:设置对象文件保留天数,以该文件最后修改时间的天数为起始计算,超过设定天数时即执行规则进行删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为30天,最后修改日期为2016-1-1的对象会在2016年1月31号被后端程序扫描删除或转换为其他存储类型。设置项包括: 文件保留指定天数后转换到低频访问 文件保留指定天数后转换到归档冷备 文件保留指定天数后删除 过期日期:将最后修改时间为指定日期之前的所有文件删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为2012-12-21,最后修改日期为2012-12-21之前的对象会被后端程序扫描删除或转换为其他存储类型。设置项包括: 转换指定日期之前的文件到低频访问 转换指定日期之前的文件到归档冷备 删除指定日期之前的文件 不启用:不启用文件自动删除或转换存储类型的功能。 删除碎片 过期日期:删除初始化时间为指定日期之前的所有分块上传事件。如设置时间为2012-12-21,在2012-12-21之前初始化的分块上传事件会被后端程序扫描删除。 过期天数:设置分块上传事件保留天数,以该事件初始化时为起始计算,超过设定天数时即执行规则进行删除。如设置时间为30天,在2016-1-1初始化的分块上传事件会在1 月31号被后端程序扫描删除。 不启用:不启用碎片自动删除功能。 单击确定。 说明 规则保存成功后,您可以在策略列表中查看已设置的生命周期规则,并进行相应的编辑或者删除操作。

2019-12-01 23:13:11 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 您可以通过控制台定义和管理存储空间内所有对象或对象的某个子集(通过指定关键词名称前缀)的生命周期。设置生命周期一般用于文件的批量管理和自动碎片删除等操作。 对于规则匹配的对象,系统会保证在生效日期两日内将数据清除或转换为其他存储类型。 应用生命周期规则而批量删除的数据将无法恢复,请谨慎配置该规则。 操作步骤 进入OSS管理控制台界面。 在左侧存储空间列表中,单击目标存储空间名称,打开该存储空间概览页面。 单击基础设置页签,找到生命周期区域,然后单击设置。 单击创建规则,打开生命周期创建规则对话框。 配置生命周期规则。 状态:指定本条规则的状态,分别表示启用该规则和停用该规则。 策略:选择匹配对象策略,可以选择按前缀配置(按照对象名称前缀匹配),也可以选择配置到整个Bucket(直接匹配到整个存储空间)。 前缀:如果策略选择了按前缀配置,则需要输入对象名称的前缀。假设您在存储空间中存储了图片对象,这些对象使用img/作为名称前缀,要对这些文件进行生命周期管理,则在此键入img/。 删除文件 过期天数:设置对象文件保留天数,以该文件最后修改时间的天数为起始计算,超过设定天数时即执行规则进行删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为30天,最后修改日期为2016-1-1的对象会在2016年1月31号被后端程序扫描删除或转换为其他存储类型。设置项包括: 文件保留指定天数后转换到低频访问 文件保留指定天数后转换到归档冷备 文件保留指定天数后删除 过期日期:将最后修改时间为指定日期之前的所有文件删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为2012-12-21,最后修改日期为2012-12-21之前的对象会被后端程序扫描删除或转换为其他存储类型。设置项包括: 转换指定日期之前的文件到低频访问 转换指定日期之前的文件到归档冷备 删除指定日期之前的文件 不启用:不启用文件自动删除或转换存储类型的功能。 删除碎片 过期日期:删除初始化时间为指定日期之前的所有分块上传事件。如设置时间为2012-12-21,在2012-12-21之前初始化的分块上传事件会被后端程序扫描删除。 过期天数:设置分块上传事件保留天数,以该事件初始化时为起始计算,超过设定天数时即执行规则进行删除。如设置时间为30天,在2016-1-1初始化的分块上传事件会在1 月31号被后端程序扫描删除。 不启用:不启用碎片自动删除功能。 单击确定。 说明 规则保存成功后,您可以在策略列表中查看已设置的生命周期规则,并进行相应的编辑或者删除操作。

2019-12-01 23:13:11 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 您可以通过控制台定义和管理存储空间内所有对象或对象的某个子集(通过指定关键词名称前缀)的生命周期。设置生命周期一般用于文件的批量管理和自动碎片删除等操作。 对于规则匹配的对象,系统会保证在生效日期两日内将数据清除或转换为其他存储类型。 应用生命周期规则而批量删除的数据将无法恢复,请谨慎配置该规则。 操作步骤 进入OSS管理控制台界面。 在左侧存储空间列表中,单击目标存储空间名称,打开该存储空间概览页面。 单击基础设置页签,找到生命周期区域,然后单击设置。 单击创建规则,打开生命周期创建规则对话框。 配置生命周期规则。 状态:指定本条规则的状态,分别表示启用该规则和停用该规则。 策略:选择匹配对象策略,可以选择按前缀配置(按照对象名称前缀匹配),也可以选择配置到整个Bucket(直接匹配到整个存储空间)。 前缀:如果策略选择了按前缀配置,则需要输入对象名称的前缀。假设您在存储空间中存储了图片对象,这些对象使用img/作为名称前缀,要对这些文件进行生命周期管理,则在此键入img/。 删除文件 过期天数:设置对象文件保留天数,以该文件最后修改时间的天数为起始计算,超过设定天数时即执行规则进行删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为30天,最后修改日期为2016-1-1的对象会在2016年1月31号被后端程序扫描删除或转换为其他存储类型。设置项包括: 文件保留指定天数后转换到低频访问 文件保留指定天数后转换到归档冷备 文件保留指定天数后删除 过期日期:将最后修改时间为指定日期之前的所有文件删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为2012-12-21,最后修改日期为2012-12-21之前的对象会被后端程序扫描删除或转换为其他存储类型。设置项包括: 转换指定日期之前的文件到低频访问 转换指定日期之前的文件到归档冷备 删除指定日期之前的文件 不启用:不启用文件自动删除或转换存储类型的功能。 删除碎片 过期日期:删除初始化时间为指定日期之前的所有分块上传事件。如设置时间为2012-12-21,在2012-12-21之前初始化的分块上传事件会被后端程序扫描删除。 过期天数:设置分块上传事件保留天数,以该事件初始化时为起始计算,超过设定天数时即执行规则进行删除。如设置时间为30天,在2016-1-1初始化的分块上传事件会在1 月31号被后端程序扫描删除。 不启用:不启用碎片自动删除功能。 单击确定。 说明 规则保存成功后,您可以在策略列表中查看已设置的生命周期规则,并进行相应的编辑或者删除操作。

2019-12-01 23:13:12 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 您可以通过控制台定义和管理存储空间内所有对象或对象的某个子集(通过指定关键词名称前缀)的生命周期。设置生命周期一般用于文件的批量管理和自动碎片删除等操作。 对于规则匹配的对象,系统会保证在生效日期两日内将数据清除或转换为其他存储类型。 应用生命周期规则而批量删除的数据将无法恢复,请谨慎配置该规则。 操作步骤 进入OSS管理控制台界面。 在左侧存储空间列表中,单击目标存储空间名称,打开该存储空间概览页面。 单击基础设置页签,找到生命周期区域,然后单击设置。 单击创建规则,打开生命周期创建规则对话框。 配置生命周期规则。 状态:指定本条规则的状态,分别表示启用该规则和停用该规则。 策略:选择匹配对象策略,可以选择按前缀配置(按照对象名称前缀匹配),也可以选择配置到整个Bucket(直接匹配到整个存储空间)。 前缀:如果策略选择了按前缀配置,则需要输入对象名称的前缀。假设您在存储空间中存储了图片对象,这些对象使用img/作为名称前缀,要对这些文件进行生命周期管理,则在此键入img/。 删除文件 过期天数:设置对象文件保留天数,以该文件最后修改时间的天数为起始计算,超过设定天数时即执行规则进行删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为30天,最后修改日期为2016-1-1的对象会在2016年1月31号被后端程序扫描删除或转换为其他存储类型。设置项包括: 文件保留指定天数后转换到低频访问 文件保留指定天数后转换到归档冷备 文件保留指定天数后删除 过期日期:将最后修改时间为指定日期之前的所有文件删除或转换为其他存储类型(低频访问类型或归档类型)。如设置时间为2012-12-21,最后修改日期为2012-12-21之前的对象会被后端程序扫描删除或转换为其他存储类型。设置项包括: 转换指定日期之前的文件到低频访问 转换指定日期之前的文件到归档冷备 删除指定日期之前的文件 不启用:不启用文件自动删除或转换存储类型的功能。 删除碎片 过期日期:删除初始化时间为指定日期之前的所有分块上传事件。如设置时间为2012-12-21,在2012-12-21之前初始化的分块上传事件会被后端程序扫描删除。 过期天数:设置分块上传事件保留天数,以该事件初始化时为起始计算,超过设定天数时即执行规则进行删除。如设置时间为30天,在2016-1-1初始化的分块上传事件会在1 月31号被后端程序扫描删除。 不启用:不启用碎片自动删除功能。 单击确定。 说明 规则保存成功后,您可以在策略列表中查看已设置的生命周期规则,并进行相应的编辑或者删除操作。

2019-12-01 23:13:12 0 浏览量 回答数 0

问题

如何实现设置生命周期?

青衫无名 2019-12-01 21:55:48 1253 浏览量 回答数 0

问题

对象存储 OSS设置生命周期规则

2019-12-01 18:40:13 463 浏览量 回答数 1

问题

对象存储 OSS设置生命周期规则

2019-12-01 18:40:05 450 浏览量 回答数 1

问题

对象存储 OSS设置生命周期规则

2019-12-01 18:40:25 249 浏览量 回答数 1

回答

阿里云对象存储OSS,是阿里云提供的海量、安全、低成本、高可靠的云存储服务。本文将OSS与传统的自建存储进行对比,让您更好的了解OSS。 OSS与自建存储对比的优势 OSS具备的其他各项优势 方便、快捷的使用方式 提供标准的RESTful API接口、丰富的SDK包、客户端工具、控制台。您可以像使用文件一样方便地上传、下载、检索、管理用于Web网站或者移动应用的海量数据。 不限制存储空间大小。您可以根据所需存储量无限扩展存储空间,解决了传统硬件存储扩容问题。 支持流式写入和读出。特别适合视频等大文件的边写边读业务场景。 支持数据生命周期管理。您可以通过设置生命周期规则,将到期数据批量删除或者转储为更低成本的低频访问型存储或归档型存储。 强大、灵活的安全机制 灵活的鉴权,授权机制。提供STS和URL鉴权和授权机制、IP黑白名单、防盗链、主子账号等功能。 提供用户级别资源隔离机制和多集群同步机制(可选)。 数据冗余机制 OSS 采用数据冗余存储机制,将每个对象的不同冗余存储在同一个区域内多个设施的多个设备上,确保硬件失效时的数据可靠性和可用性。 OSS Object 操作具有强一致性,用户一旦收到了上传/复制成功的响应,则该上传的 Object 就已经立即可读,且数据已经冗余写入到多个设备中。 OSS 会通过计算网络流量包的校验和,验证数据包在客户端和服务端之间传输中是否出错,保证数据完整传输。 OSS 的冗余存储机制,可支持两个存储设施并发损坏时,仍维持数据不丢失。 当数据存入 OSS 后,OSS 会检测和修复丢失的冗余,确保数据可靠性和可用性。 OSS 会周期性地通过校验等方式验证数据的完整性,及时发现因硬件失效等原因造成的数据损坏。当检测到数据有部分损坏或丢失时,OSS 会利用冗余的数据,进行重建并修复损坏数据。 丰富、强大的增值服务 图片处理:支持jpg、png、bmp、gif、webp、tiff等多种图片格式的转换,以及缩略图、剪裁、水印、缩放等多种操作。 音视频转码:提供高质量、高速并行的音视频转码能力,让您的音视频文件轻松应对各种终端设备。 互联网访问加速:OSS提供传输加速服务,支持上传、下载加速,可优化跨洋、跨省数据上传、下载体验。详情请参见传输加速。 内容加速分发:OSS作为源站,搭配CDN进行内容分发,提升同一个文件,被大量重复下载的体验。

剑曼红尘 2020-03-26 17:33:33 0 浏览量 回答数 0

问题

.NET-SDK之如何实现生命周期管理?

青衫无名 2019-12-01 21:43:24 1163 浏览量 回答数 0

问题

PHP-SDK之如何实现生命周期管理?

青衫无名 2019-12-01 21:45:03 1203 浏览量 回答数 0

问题

关于Bucket的操作之如何实现PutBucketLifecycle?

青衫无名 2019-12-01 21:49:23 1167 浏览量 回答数 0

回答

混合云备份服务(Hybrid Backup Recovery,简称HBR) 是一种高效、安全、低成本的全托管式云备份存储服务。您可以使用混合云备份将企业数据中心的数据、分支机构数据,或云上资源备份到混合云备份的云上备份仓库。 混合云备份架构图 在本地数据中心部署HBR客户端后,用户可以通过专线、VPN或者公网将指定需要备份的本地文件、NAS文件、VMWare虚拟机以及SQL Server数据库备份到阿里云上的备份库中。同时,通过高等级加密以及高效的重删压缩技术,确保了数据传输的高效性和安全性。 此外,针对阿里云上各个类型的数据,包括ECS的文件、SQL Server、SAP HANA、NAS服务、以及OSS服务上的数据,HBR提供了简单易用的原生数据保护功能。 为什么选择混合云备份 相比于在自建的数据中心搭建备份系统或自行搭建云上备份系统,混合云备份具有以下优势: 对比项 手工备份 混合云备份服务 权限管理 无 手工备份没有严格的权限管理功能,容易出现数据误删除等操作。 有 混合云备份服务使用RAM服务为操作人员划分等级权限,限制其访问被授权的资源。 重删压缩 无 重复备份的数据会增加大量的存储成本,且备份速度低。 有 混合云备份服务采用阿里云自研的重删(重复数据删除)、压缩技术,可有效减少I/O传输量和云备份存储量,从而提高备份速度,节省成本。 备份报警 无 一旦出现备份失败,不通过人工跟踪无法感知。有些只有在恢复备份时,才发现备份失败。 有 混合云备份服务的备份报警功能可以在备份失败或客户端与服务器连接断开时,向备份人员发送报警通知。 备份数据生命周期 手动管理 自动管理 数据恢复 需手动整合多个恢复副本。 混合云备份服务的备份版本展示清晰,方便恢复时选择,还可以设置恢复规则。 管理成本 高 手工备份需要人工写脚本、需要相应的管理人员,整体运维复杂、难度较大、资源利用率低、管理成本高。 低 使用混合云备份服务,您只需将备份数据托管到我们的云上备份仓库,无需担心硬件预置、配置、集群扩展、安全等问题。 数据加密 需自建 全自动,支持AES256加密、AK授权加密、HTTPS传输加密。 混合云备份支持备份哪些数据源 数据源 系统 备份客户端 本地数据中心 文件目录 Windows/Windows Server/Linux 文件客户端 VMware vSphere中的虚拟机镜像 Windows/Windows Server/Linux 虚机客户端 SAP HANA Linux 文件客户端 SQL Server Windows Server 文件客户端 MySQL Windows Server/Linux 文件客户端 MongoDB Windows Server/Linux 文件客户端 阿里云ECS ECS中的文件目录 Windows Server/Linux ECS备份客户端 部署在ECS上的SAP HANA Windows Server/Linux ECS备份客户端 部署在ECS上的SQL Server Windows Server ECS备份客户端 云存储网关 部署在阿里云上的文件网关 不涉及 云存储网关客户端 阿里云文件存储NAS 保存在阿里云文件存储NAS的数据 不涉及 不涉及 阿里云对象存储OSS 保存在阿里云对象存储OSS的数据 不涉及 不涉及 相关概念 名称 描述 备份源 需要备份的数据所在的机器,例如服务器、虚拟机或者ECS实例。 客户端 客户端安装在备份源上。您可以通过客户端进行备份和恢复等操作。不同的备份源系统和平台需要安装相应的客户端。 客户端支持断点续传、定时重试等方式确保备份稳定性,在网络短时抖动情况下依然可以完成备份。 地域 地域是指阿里云物理的数据中心。资源创建成功后不能更换地域。更多参见地域和可用区。 备份仓库 备份仓库是HBR的云上备份仓库,用于存储您备份在云上的数据。多个客户端可以备份到同一个仓库,帮助您更高效的管理备份数据,减小管理时间和成本。 备份仓库支持的客户端数和存储容量没有限制,按需订阅,按需扩容,同时备份库提供12个9的数据可靠性。 备份仓库有地域属性,选择合理的备份仓库地域可以帮助您提高备份性能,布局容灾。备份仓库创建成功后不能更换地域。数据的重删压缩都以备份仓库为单位。 镜像仓库 镜像仓库是备份仓库的异地镜像,镜像仓库可以帮助您实现异地容灾,您还可以使用异地镜像仓库实现跨区域恢复。 图形化中转机 如果您需要备份Linux系统中的文件目录,且该Linux系统未安装图形化界面,需要将HBR的客户端下载到一台有图形化界面的中转机上,然后部署到被保护机器。您可以在中转机登录客户端界面。

1934890530796658 2020-03-30 14:04:31 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档OSS 移动端SDK 上传文件的方式可以分为:简单上传,追加上传,分片上传和断点续传。 简单上传上传Object可以直接上传OSSData,或者通过NSURL上传一个文件: OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 可选字段,可不设置put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject// put.contentType = @"";// put.contentMd5 = @"";// put.contentEncoding = @"";// put.contentDisposition = @"";// put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil]; // 可以在上传时设置元信息或者其他HTTP头部OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 上传到文件目录OSS服务是没有文件夹这个概念的,所有元素都是以文件来存储,但给用户提供了创建模拟文件夹的方式。创建模拟文件夹本质上来说是创建了一个名字以“/”结尾的文件,对于这个文件照样可以上传下载,只是控制台会对以“/”结尾的文件以文件夹的方式展示。 如,在上传文件是,如果把ObjectKey写为"folder/subfolder/file",即是模拟了把文件上传到folder/subfolder/下的file文件。注意,路径默认是”根目录”,不需要以’/‘开头。 上传时设置Content-Type和开启校验MD5上传时可以显式指定ContentType,如果没有指定,SDK会根据文件名或者上传的ObjectKey自动判断。另外,上传Object时如果设置了Content-Md5,那么OSS会用之检查消息内容是否与发送时一致。SDK提供了方便的Base64和MD5计算方法。 OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 设置Content-Type,可选put.contentType = @"application/octet-stream";// 设置MD5校验,可选put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; // 如果是文件路径// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>]; // 如果是二进制数据// 进度设置,可选put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 追加上传Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。 OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];// 必填字段append.bucketName = @"<bucketName>";append.objectKey = @"<objectKey>";append.appendPosition = 0; // 指定从何处进行追加NSString * docDir = [self getDocumentDirectory];append.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// 可选字段append.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/object&AppendObject// append.contentType = @"";// append.contentMd5 = @"";// append.contentEncoding = @"";// append.contentDisposition = @"";OSSTask * appendTask = [client appendObject:append];[appendTask continueWithBlock:^id(OSSTask *task) { NSLog(@"objectKey: %@", append.objectKey); if (!task.error) { NSLog(@"append object success!"); OSSAppendObjectResult * result = task.result; NSString * etag = result.eTag; long nextPosition = result.xOssNextAppendPosition; } else { NSLog(@"append object failed, error: %@" , task.error); } return nil;}]; 上传后回调通知客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。因为加入了回调请求和响应的过程,相比简单上传,使用回调通知机制一般会导致客户端花费更多的等待时间。 具体说明参考:Callback 代码示例: OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = @"<bucketName>";request.objectKey = @"<objectKey>";request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"];// 设置回调参数request.callbackParam = @{ @"callbackUrl": @"<your server callback address>", @"callbackBody": @"<your callback body>" };// 设置自定义变量request.callbackVar = @{ @"<var1>": @"<value1>", @"<var2>": @"<value2>" };request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * task = [client putObject:request];[task continueWithBlock:^id(OSSTask *task) { if (task.error) { OSSLogError(@"%@", task.error); } else { OSSPutObjectResult * result = task.result; NSLog(@"Result - requestId: %@, headerFields: %@, servercallback: %@", result.requestId, result.httpResponseHeaderFields, result.serverReturnJsonString); } return nil;}]; 分片上传因为篇幅的原因,分片上传参考:分片上传 断点续传 特别注意: 断点续传暂时只支持上传本地文件。 对于移动端来说,如果不是比较大的文件,不建议使用这种方式上传,因为断点续传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。** 在无线网络下,上传比较大的文件持续时间长,可能会遇到因为网络条件差、用户切换网络等原因导致上传中途失败,整个文件需要重新上传。为此,SDK提供了断点上传功能。 在上传前,可以指定断点记录的保存文件夹。若不进行此项设置,断点上传只在本次上传生效,某个分片因为网络原因等上传失败时会进行重试,避免整个大文件重新上传,节省重试时间和耗用流量。如果设置了断点记录的保存文件夹,如果任务失败,在下次重新启动任务,上传同一文件到同一Bucket、Object时,如果用户设置取消时不删除断点记录。再次上传将从断点记录处继续上传。详见随后的范例。 断点续传失败时,如果同一任务一直得不到续传,可能会在OSS上积累无用碎片。对这种情况,可以为Bucket设置lifeCycle规则,定时清理碎片。参考:生命周期管理。 出于碎片管理的原因,如果在断点续传时取消当前任务。默认会同步清理已经上传到服务器的分片。如果取消时需要保留断点上传记录,需要指定断点记录的保存文件夹并修改deleteUploadIdOnCancelling参数。需要注意,如果本地保留记录时间过长,且Bucket设置lifeCycle规则定时清理了服务端分片。会出现服务端和移动端记录不一致的问题。 说明: 断点续传的实现依赖InitMultipartUpload/UploadPart/ListParts/CompleteMultipartUpload/AbortMultipartUpload,如果采用STS鉴权模式,请注意加上这些API所需的权限。 断点续传也支持上传后回调通知,用法和上述普通上传回调通知一致。 断点续传已经默认开启每个分片上传时的Md5校验,请勿重复在request中设置Content-Md5头部。 在本地持久保存断点记录的调用方式(默认是不设置): OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = OSS_BUCKET_PRIVATE;//...NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];resumableUpload.recordDirectoryPath = cachesDir; 断点续传功能实现 // 获得UploadId进行上传,如果任务失败并且可以续传,利用同一个UploadId可以上传同一文件到同一个OSS上的存储对象OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = <bucketName>;resumableUpload.objectKey = <objectKey>;resumableUpload.partSize = 1024 * 1024;resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];//设置断点记录文件resumableUpload.recordDirectoryPath = cachesDir;//设置NO,取消时,不删除断点记录文件,如果不进行设置,默认YES,是会删除断点记录文件,下次再进行上传时会重新上传。resumableUpload.deleteUploadIdOnCancelling = NO;resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:<your file path>];OSSTask * resumeTask = [client resumableUpload:resumableUpload];[resumeTask continueWithBlock:^id(OSSTask *task) { if (task.error) { NSLog(@"error: %@", task.error); if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) { // 该任务无法续传,需要获取新的uploadId重新上传 } } else { NSLog(@"Upload file success"); } return nil;}];// [resumeTask waitUntilFinished];// [resumableUpload cancel]; 数据完整性校验因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。 MD5校验 需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的完整性。 OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = BUCKET_NAME;...request.contentMd5 = [OSSUtil fileMD5String:filepath]; CRC校验 与MD5相比,CRC64可以同时上传并计算CRC值。 // 构造上传请求OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = OSS_BUCKET_PRIVATE;///....request.crcFlag = OSSRequestCRCOpen;// 开启crc效验后。如果在传输中数据不一致,会提示OSSClientErrorCodeInvalidCRC 错误。OSSTask * task = [_client putObject:request];[[task continueWithBlock:^id(OSSTask *task) { //如果crc效验失败,会有error XCTAssertNil(task.error); return nil;}] waitUntilFinished];

2019-12-01 23:14:07 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档OSS 移动端SDK 上传文件的方式可以分为:简单上传,追加上传,分片上传和断点续传。 简单上传上传Object可以直接上传OSSData,或者通过NSURL上传一个文件: OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 可选字段,可不设置put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject// put.contentType = @"";// put.contentMd5 = @"";// put.contentEncoding = @"";// put.contentDisposition = @"";// put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil]; // 可以在上传时设置元信息或者其他HTTP头部OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 上传到文件目录OSS服务是没有文件夹这个概念的,所有元素都是以文件来存储,但给用户提供了创建模拟文件夹的方式。创建模拟文件夹本质上来说是创建了一个名字以“/”结尾的文件,对于这个文件照样可以上传下载,只是控制台会对以“/”结尾的文件以文件夹的方式展示。 如,在上传文件是,如果把ObjectKey写为"folder/subfolder/file",即是模拟了把文件上传到folder/subfolder/下的file文件。注意,路径默认是”根目录”,不需要以’/‘开头。 上传时设置Content-Type和开启校验MD5上传时可以显式指定ContentType,如果没有指定,SDK会根据文件名或者上传的ObjectKey自动判断。另外,上传Object时如果设置了Content-Md5,那么OSS会用之检查消息内容是否与发送时一致。SDK提供了方便的Base64和MD5计算方法。 OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 设置Content-Type,可选put.contentType = @"application/octet-stream";// 设置MD5校验,可选put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; // 如果是文件路径// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>]; // 如果是二进制数据// 进度设置,可选put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 追加上传Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。 OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];// 必填字段append.bucketName = @"<bucketName>";append.objectKey = @"<objectKey>";append.appendPosition = 0; // 指定从何处进行追加NSString * docDir = [self getDocumentDirectory];append.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// 可选字段append.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/object&AppendObject// append.contentType = @"";// append.contentMd5 = @"";// append.contentEncoding = @"";// append.contentDisposition = @"";OSSTask * appendTask = [client appendObject:append];[appendTask continueWithBlock:^id(OSSTask *task) { NSLog(@"objectKey: %@", append.objectKey); if (!task.error) { NSLog(@"append object success!"); OSSAppendObjectResult * result = task.result; NSString * etag = result.eTag; long nextPosition = result.xOssNextAppendPosition; } else { NSLog(@"append object failed, error: %@" , task.error); } return nil;}]; 上传后回调通知客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。因为加入了回调请求和响应的过程,相比简单上传,使用回调通知机制一般会导致客户端花费更多的等待时间。 具体说明参考:Callback 代码示例: OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = @"<bucketName>";request.objectKey = @"<objectKey>";request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"];// 设置回调参数request.callbackParam = @{ @"callbackUrl": @"<your server callback address>", @"callbackBody": @"<your callback body>" };// 设置自定义变量request.callbackVar = @{ @"<var1>": @"<value1>", @"<var2>": @"<value2>" };request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * task = [client putObject:request];[task continueWithBlock:^id(OSSTask *task) { if (task.error) { OSSLogError(@"%@", task.error); } else { OSSPutObjectResult * result = task.result; NSLog(@"Result - requestId: %@, headerFields: %@, servercallback: %@", result.requestId, result.httpResponseHeaderFields, result.serverReturnJsonString); } return nil;}]; 分片上传因为篇幅的原因,分片上传参考:分片上传 断点续传 特别注意: 断点续传暂时只支持上传本地文件。 对于移动端来说,如果不是比较大的文件,不建议使用这种方式上传,因为断点续传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。** 在无线网络下,上传比较大的文件持续时间长,可能会遇到因为网络条件差、用户切换网络等原因导致上传中途失败,整个文件需要重新上传。为此,SDK提供了断点上传功能。 在上传前,可以指定断点记录的保存文件夹。若不进行此项设置,断点上传只在本次上传生效,某个分片因为网络原因等上传失败时会进行重试,避免整个大文件重新上传,节省重试时间和耗用流量。如果设置了断点记录的保存文件夹,如果任务失败,在下次重新启动任务,上传同一文件到同一Bucket、Object时,如果用户设置取消时不删除断点记录。再次上传将从断点记录处继续上传。详见随后的范例。 断点续传失败时,如果同一任务一直得不到续传,可能会在OSS上积累无用碎片。对这种情况,可以为Bucket设置lifeCycle规则,定时清理碎片。参考:生命周期管理。 出于碎片管理的原因,如果在断点续传时取消当前任务。默认会同步清理已经上传到服务器的分片。如果取消时需要保留断点上传记录,需要指定断点记录的保存文件夹并修改deleteUploadIdOnCancelling参数。需要注意,如果本地保留记录时间过长,且Bucket设置lifeCycle规则定时清理了服务端分片。会出现服务端和移动端记录不一致的问题。 说明: 断点续传的实现依赖InitMultipartUpload/UploadPart/ListParts/CompleteMultipartUpload/AbortMultipartUpload,如果采用STS鉴权模式,请注意加上这些API所需的权限。 断点续传也支持上传后回调通知,用法和上述普通上传回调通知一致。 断点续传已经默认开启每个分片上传时的Md5校验,请勿重复在request中设置Content-Md5头部。 在本地持久保存断点记录的调用方式(默认是不设置): OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = OSS_BUCKET_PRIVATE;//...NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];resumableUpload.recordDirectoryPath = cachesDir; 断点续传功能实现 // 获得UploadId进行上传,如果任务失败并且可以续传,利用同一个UploadId可以上传同一文件到同一个OSS上的存储对象OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = <bucketName>;resumableUpload.objectKey = <objectKey>;resumableUpload.partSize = 1024 * 1024;resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];//设置断点记录文件resumableUpload.recordDirectoryPath = cachesDir;//设置NO,取消时,不删除断点记录文件,如果不进行设置,默认YES,是会删除断点记录文件,下次再进行上传时会重新上传。resumableUpload.deleteUploadIdOnCancelling = NO;resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:<your file path>];OSSTask * resumeTask = [client resumableUpload:resumableUpload];[resumeTask continueWithBlock:^id(OSSTask *task) { if (task.error) { NSLog(@"error: %@", task.error); if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) { // 该任务无法续传,需要获取新的uploadId重新上传 } } else { NSLog(@"Upload file success"); } return nil;}];// [resumeTask waitUntilFinished];// [resumableUpload cancel]; 数据完整性校验因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。 MD5校验 需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的完整性。 OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = BUCKET_NAME;...request.contentMd5 = [OSSUtil fileMD5String:filepath]; CRC校验 与MD5相比,CRC64可以同时上传并计算CRC值。 // 构造上传请求OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = OSS_BUCKET_PRIVATE;///....request.crcFlag = OSSRequestCRCOpen;// 开启crc效验后。如果在传输中数据不一致,会提示OSSClientErrorCodeInvalidCRC 错误。OSSTask * task = [_client putObject:request];[[task continueWithBlock:^id(OSSTask *task) { //如果crc效验失败,会有error XCTAssertNil(task.error); return nil;}] waitUntilFinished];

2019-12-01 23:14:08 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档OSS 移动端SDK 上传文件的方式可以分为:简单上传,追加上传,分片上传和断点续传。 简单上传上传Object可以直接上传OSSData,或者通过NSURL上传一个文件: OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 可选字段,可不设置put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject// put.contentType = @"";// put.contentMd5 = @"";// put.contentEncoding = @"";// put.contentDisposition = @"";// put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil]; // 可以在上传时设置元信息或者其他HTTP头部OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 上传到文件目录OSS服务是没有文件夹这个概念的,所有元素都是以文件来存储,但给用户提供了创建模拟文件夹的方式。创建模拟文件夹本质上来说是创建了一个名字以“/”结尾的文件,对于这个文件照样可以上传下载,只是控制台会对以“/”结尾的文件以文件夹的方式展示。 如,在上传文件是,如果把ObjectKey写为"folder/subfolder/file",即是模拟了把文件上传到folder/subfolder/下的file文件。注意,路径默认是”根目录”,不需要以’/‘开头。 上传时设置Content-Type和开启校验MD5上传时可以显式指定ContentType,如果没有指定,SDK会根据文件名或者上传的ObjectKey自动判断。另外,上传Object时如果设置了Content-Md5,那么OSS会用之检查消息内容是否与发送时一致。SDK提供了方便的Base64和MD5计算方法。 OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 设置Content-Type,可选put.contentType = @"application/octet-stream";// 设置MD5校验,可选put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; // 如果是文件路径// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>]; // 如果是二进制数据// 进度设置,可选put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 追加上传Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。 OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];// 必填字段append.bucketName = @"<bucketName>";append.objectKey = @"<objectKey>";append.appendPosition = 0; // 指定从何处进行追加NSString * docDir = [self getDocumentDirectory];append.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// 可选字段append.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/object&AppendObject// append.contentType = @"";// append.contentMd5 = @"";// append.contentEncoding = @"";// append.contentDisposition = @"";OSSTask * appendTask = [client appendObject:append];[appendTask continueWithBlock:^id(OSSTask *task) { NSLog(@"objectKey: %@", append.objectKey); if (!task.error) { NSLog(@"append object success!"); OSSAppendObjectResult * result = task.result; NSString * etag = result.eTag; long nextPosition = result.xOssNextAppendPosition; } else { NSLog(@"append object failed, error: %@" , task.error); } return nil;}]; 上传后回调通知客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。因为加入了回调请求和响应的过程,相比简单上传,使用回调通知机制一般会导致客户端花费更多的等待时间。 具体说明参考:Callback 代码示例: OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = @"<bucketName>";request.objectKey = @"<objectKey>";request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"];// 设置回调参数request.callbackParam = @{ @"callbackUrl": @"<your server callback address>", @"callbackBody": @"<your callback body>" };// 设置自定义变量request.callbackVar = @{ @"<var1>": @"<value1>", @"<var2>": @"<value2>" };request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * task = [client putObject:request];[task continueWithBlock:^id(OSSTask *task) { if (task.error) { OSSLogError(@"%@", task.error); } else { OSSPutObjectResult * result = task.result; NSLog(@"Result - requestId: %@, headerFields: %@, servercallback: %@", result.requestId, result.httpResponseHeaderFields, result.serverReturnJsonString); } return nil;}]; 分片上传因为篇幅的原因,分片上传参考:分片上传 断点续传 特别注意: 断点续传暂时只支持上传本地文件。 对于移动端来说,如果不是比较大的文件,不建议使用这种方式上传,因为断点续传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。** 在无线网络下,上传比较大的文件持续时间长,可能会遇到因为网络条件差、用户切换网络等原因导致上传中途失败,整个文件需要重新上传。为此,SDK提供了断点上传功能。 在上传前,可以指定断点记录的保存文件夹。若不进行此项设置,断点上传只在本次上传生效,某个分片因为网络原因等上传失败时会进行重试,避免整个大文件重新上传,节省重试时间和耗用流量。如果设置了断点记录的保存文件夹,如果任务失败,在下次重新启动任务,上传同一文件到同一Bucket、Object时,如果用户设置取消时不删除断点记录。再次上传将从断点记录处继续上传。详见随后的范例。 断点续传失败时,如果同一任务一直得不到续传,可能会在OSS上积累无用碎片。对这种情况,可以为Bucket设置lifeCycle规则,定时清理碎片。参考:生命周期管理。 出于碎片管理的原因,如果在断点续传时取消当前任务。默认会同步清理已经上传到服务器的分片。如果取消时需要保留断点上传记录,需要指定断点记录的保存文件夹并修改deleteUploadIdOnCancelling参数。需要注意,如果本地保留记录时间过长,且Bucket设置lifeCycle规则定时清理了服务端分片。会出现服务端和移动端记录不一致的问题。 说明: 断点续传的实现依赖InitMultipartUpload/UploadPart/ListParts/CompleteMultipartUpload/AbortMultipartUpload,如果采用STS鉴权模式,请注意加上这些API所需的权限。 断点续传也支持上传后回调通知,用法和上述普通上传回调通知一致。 断点续传已经默认开启每个分片上传时的Md5校验,请勿重复在request中设置Content-Md5头部。 在本地持久保存断点记录的调用方式(默认是不设置): OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = OSS_BUCKET_PRIVATE;//...NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];resumableUpload.recordDirectoryPath = cachesDir; 断点续传功能实现 // 获得UploadId进行上传,如果任务失败并且可以续传,利用同一个UploadId可以上传同一文件到同一个OSS上的存储对象OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = <bucketName>;resumableUpload.objectKey = <objectKey>;resumableUpload.partSize = 1024 * 1024;resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];//设置断点记录文件resumableUpload.recordDirectoryPath = cachesDir;//设置NO,取消时,不删除断点记录文件,如果不进行设置,默认YES,是会删除断点记录文件,下次再进行上传时会重新上传。resumableUpload.deleteUploadIdOnCancelling = NO;resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:<your file path>];OSSTask * resumeTask = [client resumableUpload:resumableUpload];[resumeTask continueWithBlock:^id(OSSTask *task) { if (task.error) { NSLog(@"error: %@", task.error); if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) { // 该任务无法续传,需要获取新的uploadId重新上传 } } else { NSLog(@"Upload file success"); } return nil;}];// [resumeTask waitUntilFinished];// [resumableUpload cancel]; 数据完整性校验因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。 MD5校验 需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的完整性。 OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = BUCKET_NAME;...request.contentMd5 = [OSSUtil fileMD5String:filepath]; CRC校验 与MD5相比,CRC64可以同时上传并计算CRC值。 // 构造上传请求OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = OSS_BUCKET_PRIVATE;///....request.crcFlag = OSSRequestCRCOpen;// 开启crc效验后。如果在传输中数据不一致,会提示OSSClientErrorCodeInvalidCRC 错误。OSSTask * task = [_client putObject:request];[[task continueWithBlock:^id(OSSTask *task) { //如果crc效验失败,会有error XCTAssertNil(task.error); return nil;}] waitUntilFinished];

2019-12-01 23:14:08 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档OSS 移动端SDK 上传文件的方式可以分为:简单上传,追加上传,分片上传和断点续传。 简单上传上传Object可以直接上传OSSData,或者通过NSURL上传一个文件: OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 可选字段,可不设置put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject// put.contentType = @"";// put.contentMd5 = @"";// put.contentEncoding = @"";// put.contentDisposition = @"";// put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil]; // 可以在上传时设置元信息或者其他HTTP头部OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 上传到文件目录OSS服务是没有文件夹这个概念的,所有元素都是以文件来存储,但给用户提供了创建模拟文件夹的方式。创建模拟文件夹本质上来说是创建了一个名字以“/”结尾的文件,对于这个文件照样可以上传下载,只是控制台会对以“/”结尾的文件以文件夹的方式展示。 如,在上传文件是,如果把ObjectKey写为"folder/subfolder/file",即是模拟了把文件上传到folder/subfolder/下的file文件。注意,路径默认是”根目录”,不需要以’/‘开头。 上传时设置Content-Type和开启校验MD5上传时可以显式指定ContentType,如果没有指定,SDK会根据文件名或者上传的ObjectKey自动判断。另外,上传Object时如果设置了Content-Md5,那么OSS会用之检查消息内容是否与发送时一致。SDK提供了方便的Base64和MD5计算方法。 OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 设置Content-Type,可选put.contentType = @"application/octet-stream";// 设置MD5校验,可选put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; // 如果是文件路径// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>]; // 如果是二进制数据// 进度设置,可选put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 追加上传Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。 OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];// 必填字段append.bucketName = @"<bucketName>";append.objectKey = @"<objectKey>";append.appendPosition = 0; // 指定从何处进行追加NSString * docDir = [self getDocumentDirectory];append.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// 可选字段append.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/object&AppendObject// append.contentType = @"";// append.contentMd5 = @"";// append.contentEncoding = @"";// append.contentDisposition = @"";OSSTask * appendTask = [client appendObject:append];[appendTask continueWithBlock:^id(OSSTask *task) { NSLog(@"objectKey: %@", append.objectKey); if (!task.error) { NSLog(@"append object success!"); OSSAppendObjectResult * result = task.result; NSString * etag = result.eTag; long nextPosition = result.xOssNextAppendPosition; } else { NSLog(@"append object failed, error: %@" , task.error); } return nil;}]; 上传后回调通知客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。因为加入了回调请求和响应的过程,相比简单上传,使用回调通知机制一般会导致客户端花费更多的等待时间。 具体说明参考:Callback 代码示例: OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = @"<bucketName>";request.objectKey = @"<objectKey>";request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"];// 设置回调参数request.callbackParam = @{ @"callbackUrl": @"<your server callback address>", @"callbackBody": @"<your callback body>" };// 设置自定义变量request.callbackVar = @{ @"<var1>": @"<value1>", @"<var2>": @"<value2>" };request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * task = [client putObject:request];[task continueWithBlock:^id(OSSTask *task) { if (task.error) { OSSLogError(@"%@", task.error); } else { OSSPutObjectResult * result = task.result; NSLog(@"Result - requestId: %@, headerFields: %@, servercallback: %@", result.requestId, result.httpResponseHeaderFields, result.serverReturnJsonString); } return nil;}]; 分片上传因为篇幅的原因,分片上传参考:分片上传 断点续传 特别注意: 断点续传暂时只支持上传本地文件。 对于移动端来说,如果不是比较大的文件,不建议使用这种方式上传,因为断点续传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。** 在无线网络下,上传比较大的文件持续时间长,可能会遇到因为网络条件差、用户切换网络等原因导致上传中途失败,整个文件需要重新上传。为此,SDK提供了断点上传功能。 在上传前,可以指定断点记录的保存文件夹。若不进行此项设置,断点上传只在本次上传生效,某个分片因为网络原因等上传失败时会进行重试,避免整个大文件重新上传,节省重试时间和耗用流量。如果设置了断点记录的保存文件夹,如果任务失败,在下次重新启动任务,上传同一文件到同一Bucket、Object时,如果用户设置取消时不删除断点记录。再次上传将从断点记录处继续上传。详见随后的范例。 断点续传失败时,如果同一任务一直得不到续传,可能会在OSS上积累无用碎片。对这种情况,可以为Bucket设置lifeCycle规则,定时清理碎片。参考:生命周期管理。 出于碎片管理的原因,如果在断点续传时取消当前任务。默认会同步清理已经上传到服务器的分片。如果取消时需要保留断点上传记录,需要指定断点记录的保存文件夹并修改deleteUploadIdOnCancelling参数。需要注意,如果本地保留记录时间过长,且Bucket设置lifeCycle规则定时清理了服务端分片。会出现服务端和移动端记录不一致的问题。 说明: 断点续传的实现依赖InitMultipartUpload/UploadPart/ListParts/CompleteMultipartUpload/AbortMultipartUpload,如果采用STS鉴权模式,请注意加上这些API所需的权限。 断点续传也支持上传后回调通知,用法和上述普通上传回调通知一致。 断点续传已经默认开启每个分片上传时的Md5校验,请勿重复在request中设置Content-Md5头部。 在本地持久保存断点记录的调用方式(默认是不设置): OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = OSS_BUCKET_PRIVATE;//...NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];resumableUpload.recordDirectoryPath = cachesDir; 断点续传功能实现 // 获得UploadId进行上传,如果任务失败并且可以续传,利用同一个UploadId可以上传同一文件到同一个OSS上的存储对象OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = <bucketName>;resumableUpload.objectKey = <objectKey>;resumableUpload.partSize = 1024 * 1024;resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];//设置断点记录文件resumableUpload.recordDirectoryPath = cachesDir;//设置NO,取消时,不删除断点记录文件,如果不进行设置,默认YES,是会删除断点记录文件,下次再进行上传时会重新上传。resumableUpload.deleteUploadIdOnCancelling = NO;resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:<your file path>];OSSTask * resumeTask = [client resumableUpload:resumableUpload];[resumeTask continueWithBlock:^id(OSSTask *task) { if (task.error) { NSLog(@"error: %@", task.error); if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) { // 该任务无法续传,需要获取新的uploadId重新上传 } } else { NSLog(@"Upload file success"); } return nil;}];// [resumeTask waitUntilFinished];// [resumableUpload cancel]; 数据完整性校验因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。 MD5校验 需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的完整性。 OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = BUCKET_NAME;...request.contentMd5 = [OSSUtil fileMD5String:filepath]; CRC校验 与MD5相比,CRC64可以同时上传并计算CRC值。 // 构造上传请求OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = OSS_BUCKET_PRIVATE;///....request.crcFlag = OSSRequestCRCOpen;// 开启crc效验后。如果在传输中数据不一致,会提示OSSClientErrorCodeInvalidCRC 错误。OSSTask * task = [_client putObject:request];[[task continueWithBlock:^id(OSSTask *task) { //如果crc效验失败,会有error XCTAssertNil(task.error); return nil;}] waitUntilFinished];

2019-12-01 23:14:07 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档OSS 移动端SDK 上传文件的方式可以分为:简单上传,追加上传,分片上传和断点续传。 简单上传上传Object可以直接上传OSSData,或者通过NSURL上传一个文件: OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 可选字段,可不设置put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject// put.contentType = @"";// put.contentMd5 = @"";// put.contentEncoding = @"";// put.contentDisposition = @"";// put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil]; // 可以在上传时设置元信息或者其他HTTP头部OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 上传到文件目录OSS服务是没有文件夹这个概念的,所有元素都是以文件来存储,但给用户提供了创建模拟文件夹的方式。创建模拟文件夹本质上来说是创建了一个名字以“/”结尾的文件,对于这个文件照样可以上传下载,只是控制台会对以“/”结尾的文件以文件夹的方式展示。 如,在上传文件是,如果把ObjectKey写为"folder/subfolder/file",即是模拟了把文件上传到folder/subfolder/下的file文件。注意,路径默认是”根目录”,不需要以’/‘开头。 上传时设置Content-Type和开启校验MD5上传时可以显式指定ContentType,如果没有指定,SDK会根据文件名或者上传的ObjectKey自动判断。另外,上传Object时如果设置了Content-Md5,那么OSS会用之检查消息内容是否与发送时一致。SDK提供了方便的Base64和MD5计算方法。 OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 设置Content-Type,可选put.contentType = @"application/octet-stream";// 设置MD5校验,可选put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; // 如果是文件路径// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>]; // 如果是二进制数据// 进度设置,可选put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 追加上传Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。 OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];// 必填字段append.bucketName = @"<bucketName>";append.objectKey = @"<objectKey>";append.appendPosition = 0; // 指定从何处进行追加NSString * docDir = [self getDocumentDirectory];append.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// 可选字段append.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/object&AppendObject// append.contentType = @"";// append.contentMd5 = @"";// append.contentEncoding = @"";// append.contentDisposition = @"";OSSTask * appendTask = [client appendObject:append];[appendTask continueWithBlock:^id(OSSTask *task) { NSLog(@"objectKey: %@", append.objectKey); if (!task.error) { NSLog(@"append object success!"); OSSAppendObjectResult * result = task.result; NSString * etag = result.eTag; long nextPosition = result.xOssNextAppendPosition; } else { NSLog(@"append object failed, error: %@" , task.error); } return nil;}]; 上传后回调通知客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。因为加入了回调请求和响应的过程,相比简单上传,使用回调通知机制一般会导致客户端花费更多的等待时间。 具体说明参考:Callback 代码示例: OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = @"<bucketName>";request.objectKey = @"<objectKey>";request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"];// 设置回调参数request.callbackParam = @{ @"callbackUrl": @"<your server callback address>", @"callbackBody": @"<your callback body>" };// 设置自定义变量request.callbackVar = @{ @"<var1>": @"<value1>", @"<var2>": @"<value2>" };request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * task = [client putObject:request];[task continueWithBlock:^id(OSSTask *task) { if (task.error) { OSSLogError(@"%@", task.error); } else { OSSPutObjectResult * result = task.result; NSLog(@"Result - requestId: %@, headerFields: %@, servercallback: %@", result.requestId, result.httpResponseHeaderFields, result.serverReturnJsonString); } return nil;}]; 分片上传因为篇幅的原因,分片上传参考:分片上传 断点续传 特别注意: 断点续传暂时只支持上传本地文件。 对于移动端来说,如果不是比较大的文件,不建议使用这种方式上传,因为断点续传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。** 在无线网络下,上传比较大的文件持续时间长,可能会遇到因为网络条件差、用户切换网络等原因导致上传中途失败,整个文件需要重新上传。为此,SDK提供了断点上传功能。 在上传前,可以指定断点记录的保存文件夹。若不进行此项设置,断点上传只在本次上传生效,某个分片因为网络原因等上传失败时会进行重试,避免整个大文件重新上传,节省重试时间和耗用流量。如果设置了断点记录的保存文件夹,如果任务失败,在下次重新启动任务,上传同一文件到同一Bucket、Object时,如果用户设置取消时不删除断点记录。再次上传将从断点记录处继续上传。详见随后的范例。 断点续传失败时,如果同一任务一直得不到续传,可能会在OSS上积累无用碎片。对这种情况,可以为Bucket设置lifeCycle规则,定时清理碎片。参考:生命周期管理。 出于碎片管理的原因,如果在断点续传时取消当前任务。默认会同步清理已经上传到服务器的分片。如果取消时需要保留断点上传记录,需要指定断点记录的保存文件夹并修改deleteUploadIdOnCancelling参数。需要注意,如果本地保留记录时间过长,且Bucket设置lifeCycle规则定时清理了服务端分片。会出现服务端和移动端记录不一致的问题。 说明: 断点续传的实现依赖InitMultipartUpload/UploadPart/ListParts/CompleteMultipartUpload/AbortMultipartUpload,如果采用STS鉴权模式,请注意加上这些API所需的权限。 断点续传也支持上传后回调通知,用法和上述普通上传回调通知一致。 断点续传已经默认开启每个分片上传时的Md5校验,请勿重复在request中设置Content-Md5头部。 在本地持久保存断点记录的调用方式(默认是不设置): OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = OSS_BUCKET_PRIVATE;//...NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];resumableUpload.recordDirectoryPath = cachesDir; 断点续传功能实现 // 获得UploadId进行上传,如果任务失败并且可以续传,利用同一个UploadId可以上传同一文件到同一个OSS上的存储对象OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = <bucketName>;resumableUpload.objectKey = <objectKey>;resumableUpload.partSize = 1024 * 1024;resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];//设置断点记录文件resumableUpload.recordDirectoryPath = cachesDir;//设置NO,取消时,不删除断点记录文件,如果不进行设置,默认YES,是会删除断点记录文件,下次再进行上传时会重新上传。resumableUpload.deleteUploadIdOnCancelling = NO;resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:<your file path>];OSSTask * resumeTask = [client resumableUpload:resumableUpload];[resumeTask continueWithBlock:^id(OSSTask *task) { if (task.error) { NSLog(@"error: %@", task.error); if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) { // 该任务无法续传,需要获取新的uploadId重新上传 } } else { NSLog(@"Upload file success"); } return nil;}];// [resumeTask waitUntilFinished];// [resumableUpload cancel]; 数据完整性校验因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。 MD5校验 需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的完整性。 OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = BUCKET_NAME;...request.contentMd5 = [OSSUtil fileMD5String:filepath]; CRC校验 与MD5相比,CRC64可以同时上传并计算CRC值。 // 构造上传请求OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = OSS_BUCKET_PRIVATE;///....request.crcFlag = OSSRequestCRCOpen;// 开启crc效验后。如果在传输中数据不一致,会提示OSSClientErrorCodeInvalidCRC 错误。OSSTask * task = [_client putObject:request];[[task continueWithBlock:^id(OSSTask *task) { //如果crc效验失败,会有error XCTAssertNil(task.error); return nil;}] waitUntilFinished];

2019-12-01 23:14:07 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档OSS 移动端SDK 上传文件的方式可以分为:简单上传,追加上传,分片上传和断点续传。 简单上传上传Object可以直接上传OSSData,或者通过NSURL上传一个文件: OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 可选字段,可不设置put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject// put.contentType = @"";// put.contentMd5 = @"";// put.contentEncoding = @"";// put.contentDisposition = @"";// put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil]; // 可以在上传时设置元信息或者其他HTTP头部OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 上传到文件目录OSS服务是没有文件夹这个概念的,所有元素都是以文件来存储,但给用户提供了创建模拟文件夹的方式。创建模拟文件夹本质上来说是创建了一个名字以“/”结尾的文件,对于这个文件照样可以上传下载,只是控制台会对以“/”结尾的文件以文件夹的方式展示。 如,在上传文件是,如果把ObjectKey写为"folder/subfolder/file",即是模拟了把文件上传到folder/subfolder/下的file文件。注意,路径默认是”根目录”,不需要以’/‘开头。 上传时设置Content-Type和开启校验MD5上传时可以显式指定ContentType,如果没有指定,SDK会根据文件名或者上传的ObjectKey自动判断。另外,上传Object时如果设置了Content-Md5,那么OSS会用之检查消息内容是否与发送时一致。SDK提供了方便的Base64和MD5计算方法。 OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 设置Content-Type,可选put.contentType = @"application/octet-stream";// 设置MD5校验,可选put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; // 如果是文件路径// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>]; // 如果是二进制数据// 进度设置,可选put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 追加上传Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。 OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];// 必填字段append.bucketName = @"<bucketName>";append.objectKey = @"<objectKey>";append.appendPosition = 0; // 指定从何处进行追加NSString * docDir = [self getDocumentDirectory];append.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// 可选字段append.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/object&AppendObject// append.contentType = @"";// append.contentMd5 = @"";// append.contentEncoding = @"";// append.contentDisposition = @"";OSSTask * appendTask = [client appendObject:append];[appendTask continueWithBlock:^id(OSSTask *task) { NSLog(@"objectKey: %@", append.objectKey); if (!task.error) { NSLog(@"append object success!"); OSSAppendObjectResult * result = task.result; NSString * etag = result.eTag; long nextPosition = result.xOssNextAppendPosition; } else { NSLog(@"append object failed, error: %@" , task.error); } return nil;}]; 上传后回调通知客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。因为加入了回调请求和响应的过程,相比简单上传,使用回调通知机制一般会导致客户端花费更多的等待时间。 具体说明参考:Callback 代码示例: OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = @"<bucketName>";request.objectKey = @"<objectKey>";request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"];// 设置回调参数request.callbackParam = @{ @"callbackUrl": @"<your server callback address>", @"callbackBody": @"<your callback body>" };// 设置自定义变量request.callbackVar = @{ @"<var1>": @"<value1>", @"<var2>": @"<value2>" };request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * task = [client putObject:request];[task continueWithBlock:^id(OSSTask *task) { if (task.error) { OSSLogError(@"%@", task.error); } else { OSSPutObjectResult * result = task.result; NSLog(@"Result - requestId: %@, headerFields: %@, servercallback: %@", result.requestId, result.httpResponseHeaderFields, result.serverReturnJsonString); } return nil;}]; 分片上传因为篇幅的原因,分片上传参考:分片上传 断点续传 特别注意: 断点续传暂时只支持上传本地文件。 对于移动端来说,如果不是比较大的文件,不建议使用这种方式上传,因为断点续传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。** 在无线网络下,上传比较大的文件持续时间长,可能会遇到因为网络条件差、用户切换网络等原因导致上传中途失败,整个文件需要重新上传。为此,SDK提供了断点上传功能。 在上传前,可以指定断点记录的保存文件夹。若不进行此项设置,断点上传只在本次上传生效,某个分片因为网络原因等上传失败时会进行重试,避免整个大文件重新上传,节省重试时间和耗用流量。如果设置了断点记录的保存文件夹,如果任务失败,在下次重新启动任务,上传同一文件到同一Bucket、Object时,如果用户设置取消时不删除断点记录。再次上传将从断点记录处继续上传。详见随后的范例。 断点续传失败时,如果同一任务一直得不到续传,可能会在OSS上积累无用碎片。对这种情况,可以为Bucket设置lifeCycle规则,定时清理碎片。参考:生命周期管理。 出于碎片管理的原因,如果在断点续传时取消当前任务。默认会同步清理已经上传到服务器的分片。如果取消时需要保留断点上传记录,需要指定断点记录的保存文件夹并修改deleteUploadIdOnCancelling参数。需要注意,如果本地保留记录时间过长,且Bucket设置lifeCycle规则定时清理了服务端分片。会出现服务端和移动端记录不一致的问题。 说明: 断点续传的实现依赖InitMultipartUpload/UploadPart/ListParts/CompleteMultipartUpload/AbortMultipartUpload,如果采用STS鉴权模式,请注意加上这些API所需的权限。 断点续传也支持上传后回调通知,用法和上述普通上传回调通知一致。 断点续传已经默认开启每个分片上传时的Md5校验,请勿重复在request中设置Content-Md5头部。 在本地持久保存断点记录的调用方式(默认是不设置): OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = OSS_BUCKET_PRIVATE;//...NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];resumableUpload.recordDirectoryPath = cachesDir; 断点续传功能实现 // 获得UploadId进行上传,如果任务失败并且可以续传,利用同一个UploadId可以上传同一文件到同一个OSS上的存储对象OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = <bucketName>;resumableUpload.objectKey = <objectKey>;resumableUpload.partSize = 1024 * 1024;resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];//设置断点记录文件resumableUpload.recordDirectoryPath = cachesDir;//设置NO,取消时,不删除断点记录文件,如果不进行设置,默认YES,是会删除断点记录文件,下次再进行上传时会重新上传。resumableUpload.deleteUploadIdOnCancelling = NO;resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:<your file path>];OSSTask * resumeTask = [client resumableUpload:resumableUpload];[resumeTask continueWithBlock:^id(OSSTask *task) { if (task.error) { NSLog(@"error: %@", task.error); if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) { // 该任务无法续传,需要获取新的uploadId重新上传 } } else { NSLog(@"Upload file success"); } return nil;}];// [resumeTask waitUntilFinished];// [resumableUpload cancel]; 数据完整性校验因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。 MD5校验 需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的完整性。 OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = BUCKET_NAME;...request.contentMd5 = [OSSUtil fileMD5String:filepath]; CRC校验 与MD5相比,CRC64可以同时上传并计算CRC值。 // 构造上传请求OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = OSS_BUCKET_PRIVATE;///....request.crcFlag = OSSRequestCRCOpen;// 开启crc效验后。如果在传输中数据不一致,会提示OSSClientErrorCodeInvalidCRC 错误。OSSTask * task = [_client putObject:request];[[task continueWithBlock:^id(OSSTask *task) { //如果crc效验失败,会有error XCTAssertNil(task.error); return nil;}] waitUntilFinished];

2019-12-01 23:14:09 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档OSS 移动端SDK 上传文件的方式可以分为:简单上传,追加上传,分片上传和断点续传。 简单上传上传Object可以直接上传OSSData,或者通过NSURL上传一个文件: OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 可选字段,可不设置put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject// put.contentType = @"";// put.contentMd5 = @"";// put.contentEncoding = @"";// put.contentDisposition = @"";// put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil]; // 可以在上传时设置元信息或者其他HTTP头部OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 上传到文件目录OSS服务是没有文件夹这个概念的,所有元素都是以文件来存储,但给用户提供了创建模拟文件夹的方式。创建模拟文件夹本质上来说是创建了一个名字以“/”结尾的文件,对于这个文件照样可以上传下载,只是控制台会对以“/”结尾的文件以文件夹的方式展示。 如,在上传文件是,如果把ObjectKey写为"folder/subfolder/file",即是模拟了把文件上传到folder/subfolder/下的file文件。注意,路径默认是”根目录”,不需要以’/‘开头。 上传时设置Content-Type和开启校验MD5上传时可以显式指定ContentType,如果没有指定,SDK会根据文件名或者上传的ObjectKey自动判断。另外,上传Object时如果设置了Content-Md5,那么OSS会用之检查消息内容是否与发送时一致。SDK提供了方便的Base64和MD5计算方法。 OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 设置Content-Type,可选put.contentType = @"application/octet-stream";// 设置MD5校验,可选put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; // 如果是文件路径// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>]; // 如果是二进制数据// 进度设置,可选put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 追加上传Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。 OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];// 必填字段append.bucketName = @"<bucketName>";append.objectKey = @"<objectKey>";append.appendPosition = 0; // 指定从何处进行追加NSString * docDir = [self getDocumentDirectory];append.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// 可选字段append.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/object&AppendObject// append.contentType = @"";// append.contentMd5 = @"";// append.contentEncoding = @"";// append.contentDisposition = @"";OSSTask * appendTask = [client appendObject:append];[appendTask continueWithBlock:^id(OSSTask *task) { NSLog(@"objectKey: %@", append.objectKey); if (!task.error) { NSLog(@"append object success!"); OSSAppendObjectResult * result = task.result; NSString * etag = result.eTag; long nextPosition = result.xOssNextAppendPosition; } else { NSLog(@"append object failed, error: %@" , task.error); } return nil;}]; 上传后回调通知客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。因为加入了回调请求和响应的过程,相比简单上传,使用回调通知机制一般会导致客户端花费更多的等待时间。 具体说明参考:Callback 代码示例: OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = @"<bucketName>";request.objectKey = @"<objectKey>";request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"];// 设置回调参数request.callbackParam = @{ @"callbackUrl": @"<your server callback address>", @"callbackBody": @"<your callback body>" };// 设置自定义变量request.callbackVar = @{ @"<var1>": @"<value1>", @"<var2>": @"<value2>" };request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * task = [client putObject:request];[task continueWithBlock:^id(OSSTask *task) { if (task.error) { OSSLogError(@"%@", task.error); } else { OSSPutObjectResult * result = task.result; NSLog(@"Result - requestId: %@, headerFields: %@, servercallback: %@", result.requestId, result.httpResponseHeaderFields, result.serverReturnJsonString); } return nil;}]; 分片上传因为篇幅的原因,分片上传参考:分片上传 断点续传 特别注意: 断点续传暂时只支持上传本地文件。 对于移动端来说,如果不是比较大的文件,不建议使用这种方式上传,因为断点续传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。** 在无线网络下,上传比较大的文件持续时间长,可能会遇到因为网络条件差、用户切换网络等原因导致上传中途失败,整个文件需要重新上传。为此,SDK提供了断点上传功能。 在上传前,可以指定断点记录的保存文件夹。若不进行此项设置,断点上传只在本次上传生效,某个分片因为网络原因等上传失败时会进行重试,避免整个大文件重新上传,节省重试时间和耗用流量。如果设置了断点记录的保存文件夹,如果任务失败,在下次重新启动任务,上传同一文件到同一Bucket、Object时,如果用户设置取消时不删除断点记录。再次上传将从断点记录处继续上传。详见随后的范例。 断点续传失败时,如果同一任务一直得不到续传,可能会在OSS上积累无用碎片。对这种情况,可以为Bucket设置lifeCycle规则,定时清理碎片。参考:生命周期管理。 出于碎片管理的原因,如果在断点续传时取消当前任务。默认会同步清理已经上传到服务器的分片。如果取消时需要保留断点上传记录,需要指定断点记录的保存文件夹并修改deleteUploadIdOnCancelling参数。需要注意,如果本地保留记录时间过长,且Bucket设置lifeCycle规则定时清理了服务端分片。会出现服务端和移动端记录不一致的问题。 说明: 断点续传的实现依赖InitMultipartUpload/UploadPart/ListParts/CompleteMultipartUpload/AbortMultipartUpload,如果采用STS鉴权模式,请注意加上这些API所需的权限。 断点续传也支持上传后回调通知,用法和上述普通上传回调通知一致。 断点续传已经默认开启每个分片上传时的Md5校验,请勿重复在request中设置Content-Md5头部。 在本地持久保存断点记录的调用方式(默认是不设置): OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = OSS_BUCKET_PRIVATE;//...NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];resumableUpload.recordDirectoryPath = cachesDir; 断点续传功能实现 // 获得UploadId进行上传,如果任务失败并且可以续传,利用同一个UploadId可以上传同一文件到同一个OSS上的存储对象OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = <bucketName>;resumableUpload.objectKey = <objectKey>;resumableUpload.partSize = 1024 * 1024;resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];//设置断点记录文件resumableUpload.recordDirectoryPath = cachesDir;//设置NO,取消时,不删除断点记录文件,如果不进行设置,默认YES,是会删除断点记录文件,下次再进行上传时会重新上传。resumableUpload.deleteUploadIdOnCancelling = NO;resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:<your file path>];OSSTask * resumeTask = [client resumableUpload:resumableUpload];[resumeTask continueWithBlock:^id(OSSTask *task) { if (task.error) { NSLog(@"error: %@", task.error); if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) { // 该任务无法续传,需要获取新的uploadId重新上传 } } else { NSLog(@"Upload file success"); } return nil;}];// [resumeTask waitUntilFinished];// [resumableUpload cancel]; 数据完整性校验因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。 MD5校验 需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的完整性。 OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = BUCKET_NAME;...request.contentMd5 = [OSSUtil fileMD5String:filepath]; CRC校验 与MD5相比,CRC64可以同时上传并计算CRC值。 // 构造上传请求OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = OSS_BUCKET_PRIVATE;///....request.crcFlag = OSSRequestCRCOpen;// 开启crc效验后。如果在传输中数据不一致,会提示OSSClientErrorCodeInvalidCRC 错误。OSSTask * task = [_client putObject:request];[[task continueWithBlock:^id(OSSTask *task) { //如果crc效验失败,会有error XCTAssertNil(task.error); return nil;}] waitUntilFinished];

2019-12-01 23:14:06 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档OSS 移动端SDK 上传文件的方式可以分为:简单上传,追加上传,分片上传和断点续传。 简单上传上传Object可以直接上传OSSData,或者通过NSURL上传一个文件: OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 可选字段,可不设置put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject// put.contentType = @"";// put.contentMd5 = @"";// put.contentEncoding = @"";// put.contentDisposition = @"";// put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil]; // 可以在上传时设置元信息或者其他HTTP头部OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 上传到文件目录OSS服务是没有文件夹这个概念的,所有元素都是以文件来存储,但给用户提供了创建模拟文件夹的方式。创建模拟文件夹本质上来说是创建了一个名字以“/”结尾的文件,对于这个文件照样可以上传下载,只是控制台会对以“/”结尾的文件以文件夹的方式展示。 如,在上传文件是,如果把ObjectKey写为"folder/subfolder/file",即是模拟了把文件上传到folder/subfolder/下的file文件。注意,路径默认是”根目录”,不需要以’/‘开头。 上传时设置Content-Type和开启校验MD5上传时可以显式指定ContentType,如果没有指定,SDK会根据文件名或者上传的ObjectKey自动判断。另外,上传Object时如果设置了Content-Md5,那么OSS会用之检查消息内容是否与发送时一致。SDK提供了方便的Base64和MD5计算方法。 OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 设置Content-Type,可选put.contentType = @"application/octet-stream";// 设置MD5校验,可选put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; // 如果是文件路径// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>]; // 如果是二进制数据// 进度设置,可选put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 追加上传Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。 OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];// 必填字段append.bucketName = @"<bucketName>";append.objectKey = @"<objectKey>";append.appendPosition = 0; // 指定从何处进行追加NSString * docDir = [self getDocumentDirectory];append.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// 可选字段append.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/object&AppendObject// append.contentType = @"";// append.contentMd5 = @"";// append.contentEncoding = @"";// append.contentDisposition = @"";OSSTask * appendTask = [client appendObject:append];[appendTask continueWithBlock:^id(OSSTask *task) { NSLog(@"objectKey: %@", append.objectKey); if (!task.error) { NSLog(@"append object success!"); OSSAppendObjectResult * result = task.result; NSString * etag = result.eTag; long nextPosition = result.xOssNextAppendPosition; } else { NSLog(@"append object failed, error: %@" , task.error); } return nil;}]; 上传后回调通知客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。因为加入了回调请求和响应的过程,相比简单上传,使用回调通知机制一般会导致客户端花费更多的等待时间。 具体说明参考:Callback 代码示例: OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = @"<bucketName>";request.objectKey = @"<objectKey>";request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"];// 设置回调参数request.callbackParam = @{ @"callbackUrl": @"<your server callback address>", @"callbackBody": @"<your callback body>" };// 设置自定义变量request.callbackVar = @{ @"<var1>": @"<value1>", @"<var2>": @"<value2>" };request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * task = [client putObject:request];[task continueWithBlock:^id(OSSTask *task) { if (task.error) { OSSLogError(@"%@", task.error); } else { OSSPutObjectResult * result = task.result; NSLog(@"Result - requestId: %@, headerFields: %@, servercallback: %@", result.requestId, result.httpResponseHeaderFields, result.serverReturnJsonString); } return nil;}]; 分片上传因为篇幅的原因,分片上传参考:分片上传 断点续传 特别注意: 断点续传暂时只支持上传本地文件。 对于移动端来说,如果不是比较大的文件,不建议使用这种方式上传,因为断点续传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。** 在无线网络下,上传比较大的文件持续时间长,可能会遇到因为网络条件差、用户切换网络等原因导致上传中途失败,整个文件需要重新上传。为此,SDK提供了断点上传功能。 在上传前,可以指定断点记录的保存文件夹。若不进行此项设置,断点上传只在本次上传生效,某个分片因为网络原因等上传失败时会进行重试,避免整个大文件重新上传,节省重试时间和耗用流量。如果设置了断点记录的保存文件夹,如果任务失败,在下次重新启动任务,上传同一文件到同一Bucket、Object时,如果用户设置取消时不删除断点记录。再次上传将从断点记录处继续上传。详见随后的范例。 断点续传失败时,如果同一任务一直得不到续传,可能会在OSS上积累无用碎片。对这种情况,可以为Bucket设置lifeCycle规则,定时清理碎片。参考:生命周期管理。 出于碎片管理的原因,如果在断点续传时取消当前任务。默认会同步清理已经上传到服务器的分片。如果取消时需要保留断点上传记录,需要指定断点记录的保存文件夹并修改deleteUploadIdOnCancelling参数。需要注意,如果本地保留记录时间过长,且Bucket设置lifeCycle规则定时清理了服务端分片。会出现服务端和移动端记录不一致的问题。 说明: 断点续传的实现依赖InitMultipartUpload/UploadPart/ListParts/CompleteMultipartUpload/AbortMultipartUpload,如果采用STS鉴权模式,请注意加上这些API所需的权限。 断点续传也支持上传后回调通知,用法和上述普通上传回调通知一致。 断点续传已经默认开启每个分片上传时的Md5校验,请勿重复在request中设置Content-Md5头部。 在本地持久保存断点记录的调用方式(默认是不设置): OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = OSS_BUCKET_PRIVATE;//...NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];resumableUpload.recordDirectoryPath = cachesDir; 断点续传功能实现 // 获得UploadId进行上传,如果任务失败并且可以续传,利用同一个UploadId可以上传同一文件到同一个OSS上的存储对象OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = <bucketName>;resumableUpload.objectKey = <objectKey>;resumableUpload.partSize = 1024 * 1024;resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];//设置断点记录文件resumableUpload.recordDirectoryPath = cachesDir;//设置NO,取消时,不删除断点记录文件,如果不进行设置,默认YES,是会删除断点记录文件,下次再进行上传时会重新上传。resumableUpload.deleteUploadIdOnCancelling = NO;resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:<your file path>];OSSTask * resumeTask = [client resumableUpload:resumableUpload];[resumeTask continueWithBlock:^id(OSSTask *task) { if (task.error) { NSLog(@"error: %@", task.error); if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) { // 该任务无法续传,需要获取新的uploadId重新上传 } } else { NSLog(@"Upload file success"); } return nil;}];// [resumeTask waitUntilFinished];// [resumableUpload cancel]; 数据完整性校验因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。 MD5校验 需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的完整性。 OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = BUCKET_NAME;...request.contentMd5 = [OSSUtil fileMD5String:filepath]; CRC校验 与MD5相比,CRC64可以同时上传并计算CRC值。 // 构造上传请求OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = OSS_BUCKET_PRIVATE;///....request.crcFlag = OSSRequestCRCOpen;// 开启crc效验后。如果在传输中数据不一致,会提示OSSClientErrorCodeInvalidCRC 错误。OSSTask * task = [_client putObject:request];[[task continueWithBlock:^id(OSSTask *task) { //如果crc效验失败,会有error XCTAssertNil(task.error); return nil;}] waitUntilFinished];

2019-12-01 23:14:07 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档OSS 移动端SDK 上传文件的方式可以分为:简单上传,追加上传,分片上传和断点续传。 简单上传上传Object可以直接上传OSSData,或者通过NSURL上传一个文件: OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 可选字段,可不设置put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject// put.contentType = @"";// put.contentMd5 = @"";// put.contentEncoding = @"";// put.contentDisposition = @"";// put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil]; // 可以在上传时设置元信息或者其他HTTP头部OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 上传到文件目录OSS服务是没有文件夹这个概念的,所有元素都是以文件来存储,但给用户提供了创建模拟文件夹的方式。创建模拟文件夹本质上来说是创建了一个名字以“/”结尾的文件,对于这个文件照样可以上传下载,只是控制台会对以“/”结尾的文件以文件夹的方式展示。 如,在上传文件是,如果把ObjectKey写为"folder/subfolder/file",即是模拟了把文件上传到folder/subfolder/下的file文件。注意,路径默认是”根目录”,不需要以’/‘开头。 上传时设置Content-Type和开启校验MD5上传时可以显式指定ContentType,如果没有指定,SDK会根据文件名或者上传的ObjectKey自动判断。另外,上传Object时如果设置了Content-Md5,那么OSS会用之检查消息内容是否与发送时一致。SDK提供了方便的Base64和MD5计算方法。 OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 设置Content-Type,可选put.contentType = @"application/octet-stream";// 设置MD5校验,可选put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; // 如果是文件路径// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>]; // 如果是二进制数据// 进度设置,可选put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 追加上传Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。 OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];// 必填字段append.bucketName = @"<bucketName>";append.objectKey = @"<objectKey>";append.appendPosition = 0; // 指定从何处进行追加NSString * docDir = [self getDocumentDirectory];append.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// 可选字段append.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/object&AppendObject// append.contentType = @"";// append.contentMd5 = @"";// append.contentEncoding = @"";// append.contentDisposition = @"";OSSTask * appendTask = [client appendObject:append];[appendTask continueWithBlock:^id(OSSTask *task) { NSLog(@"objectKey: %@", append.objectKey); if (!task.error) { NSLog(@"append object success!"); OSSAppendObjectResult * result = task.result; NSString * etag = result.eTag; long nextPosition = result.xOssNextAppendPosition; } else { NSLog(@"append object failed, error: %@" , task.error); } return nil;}]; 上传后回调通知客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。因为加入了回调请求和响应的过程,相比简单上传,使用回调通知机制一般会导致客户端花费更多的等待时间。 具体说明参考:Callback 代码示例: OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = @"<bucketName>";request.objectKey = @"<objectKey>";request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"];// 设置回调参数request.callbackParam = @{ @"callbackUrl": @"<your server callback address>", @"callbackBody": @"<your callback body>" };// 设置自定义变量request.callbackVar = @{ @"<var1>": @"<value1>", @"<var2>": @"<value2>" };request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * task = [client putObject:request];[task continueWithBlock:^id(OSSTask *task) { if (task.error) { OSSLogError(@"%@", task.error); } else { OSSPutObjectResult * result = task.result; NSLog(@"Result - requestId: %@, headerFields: %@, servercallback: %@", result.requestId, result.httpResponseHeaderFields, result.serverReturnJsonString); } return nil;}]; 分片上传因为篇幅的原因,分片上传参考:分片上传 断点续传 特别注意: 断点续传暂时只支持上传本地文件。 对于移动端来说,如果不是比较大的文件,不建议使用这种方式上传,因为断点续传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。** 在无线网络下,上传比较大的文件持续时间长,可能会遇到因为网络条件差、用户切换网络等原因导致上传中途失败,整个文件需要重新上传。为此,SDK提供了断点上传功能。 在上传前,可以指定断点记录的保存文件夹。若不进行此项设置,断点上传只在本次上传生效,某个分片因为网络原因等上传失败时会进行重试,避免整个大文件重新上传,节省重试时间和耗用流量。如果设置了断点记录的保存文件夹,如果任务失败,在下次重新启动任务,上传同一文件到同一Bucket、Object时,如果用户设置取消时不删除断点记录。再次上传将从断点记录处继续上传。详见随后的范例。 断点续传失败时,如果同一任务一直得不到续传,可能会在OSS上积累无用碎片。对这种情况,可以为Bucket设置lifeCycle规则,定时清理碎片。参考:生命周期管理。 出于碎片管理的原因,如果在断点续传时取消当前任务。默认会同步清理已经上传到服务器的分片。如果取消时需要保留断点上传记录,需要指定断点记录的保存文件夹并修改deleteUploadIdOnCancelling参数。需要注意,如果本地保留记录时间过长,且Bucket设置lifeCycle规则定时清理了服务端分片。会出现服务端和移动端记录不一致的问题。 说明: 断点续传的实现依赖InitMultipartUpload/UploadPart/ListParts/CompleteMultipartUpload/AbortMultipartUpload,如果采用STS鉴权模式,请注意加上这些API所需的权限。 断点续传也支持上传后回调通知,用法和上述普通上传回调通知一致。 断点续传已经默认开启每个分片上传时的Md5校验,请勿重复在request中设置Content-Md5头部。 在本地持久保存断点记录的调用方式(默认是不设置): OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = OSS_BUCKET_PRIVATE;//...NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];resumableUpload.recordDirectoryPath = cachesDir; 断点续传功能实现 // 获得UploadId进行上传,如果任务失败并且可以续传,利用同一个UploadId可以上传同一文件到同一个OSS上的存储对象OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = <bucketName>;resumableUpload.objectKey = <objectKey>;resumableUpload.partSize = 1024 * 1024;resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];//设置断点记录文件resumableUpload.recordDirectoryPath = cachesDir;//设置NO,取消时,不删除断点记录文件,如果不进行设置,默认YES,是会删除断点记录文件,下次再进行上传时会重新上传。resumableUpload.deleteUploadIdOnCancelling = NO;resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:<your file path>];OSSTask * resumeTask = [client resumableUpload:resumableUpload];[resumeTask continueWithBlock:^id(OSSTask *task) { if (task.error) { NSLog(@"error: %@", task.error); if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) { // 该任务无法续传,需要获取新的uploadId重新上传 } } else { NSLog(@"Upload file success"); } return nil;}];// [resumeTask waitUntilFinished];// [resumableUpload cancel]; 数据完整性校验因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。 MD5校验 需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的完整性。 OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = BUCKET_NAME;...request.contentMd5 = [OSSUtil fileMD5String:filepath]; CRC校验 与MD5相比,CRC64可以同时上传并计算CRC值。 // 构造上传请求OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = OSS_BUCKET_PRIVATE;///....request.crcFlag = OSSRequestCRCOpen;// 开启crc效验后。如果在传输中数据不一致,会提示OSSClientErrorCodeInvalidCRC 错误。OSSTask * task = [_client putObject:request];[[task continueWithBlock:^id(OSSTask *task) { //如果crc效验失败,会有error XCTAssertNil(task.error); return nil;}] waitUntilFinished];

2019-12-01 23:14:08 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档OSS 移动端SDK 上传文件的方式可以分为:简单上传,追加上传,分片上传和断点续传。 简单上传上传Object可以直接上传OSSData,或者通过NSURL上传一个文件: OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 可选字段,可不设置put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject// put.contentType = @"";// put.contentMd5 = @"";// put.contentEncoding = @"";// put.contentDisposition = @"";// put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil]; // 可以在上传时设置元信息或者其他HTTP头部OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 上传到文件目录OSS服务是没有文件夹这个概念的,所有元素都是以文件来存储,但给用户提供了创建模拟文件夹的方式。创建模拟文件夹本质上来说是创建了一个名字以“/”结尾的文件,对于这个文件照样可以上传下载,只是控制台会对以“/”结尾的文件以文件夹的方式展示。 如,在上传文件是,如果把ObjectKey写为"folder/subfolder/file",即是模拟了把文件上传到folder/subfolder/下的file文件。注意,路径默认是”根目录”,不需要以’/‘开头。 上传时设置Content-Type和开启校验MD5上传时可以显式指定ContentType,如果没有指定,SDK会根据文件名或者上传的ObjectKey自动判断。另外,上传Object时如果设置了Content-Md5,那么OSS会用之检查消息内容是否与发送时一致。SDK提供了方便的Base64和MD5计算方法。 OSSPutObjectRequest * put = [OSSPutObjectRequest new];// 必填字段put.bucketName = @"<bucketName>";put.objectKey = @"<objectKey>";put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// put.uploadingData = <NSData *>; // 直接上传NSData// 设置Content-Type,可选put.contentType = @"application/octet-stream";// 设置MD5校验,可选put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; // 如果是文件路径// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>]; // 如果是二进制数据// 进度设置,可选put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度 NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * putTask = [client putObject:put];[putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil;}];// [putTask waitUntilFinished];// [put cancel]; 追加上传Append Object以追加写的方式上传文件。通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。 OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];// 必填字段append.bucketName = @"<bucketName>";append.objectKey = @"<objectKey>";append.appendPosition = 0; // 指定从何处进行追加NSString * docDir = [self getDocumentDirectory];append.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];// 可选字段append.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};// 以下可选字段的含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/object&AppendObject// append.contentType = @"";// append.contentMd5 = @"";// append.contentEncoding = @"";// append.contentDisposition = @"";OSSTask * appendTask = [client appendObject:append];[appendTask continueWithBlock:^id(OSSTask *task) { NSLog(@"objectKey: %@", append.objectKey); if (!task.error) { NSLog(@"append object success!"); OSSAppendObjectResult * result = task.result; NSString * etag = result.eTag; long nextPosition = result.xOssNextAppendPosition; } else { NSLog(@"append object failed, error: %@" , task.error); } return nil;}]; 上传后回调通知客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。因为加入了回调请求和响应的过程,相比简单上传,使用回调通知机制一般会导致客户端花费更多的等待时间。 具体说明参考:Callback 代码示例: OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = @"<bucketName>";request.objectKey = @"<objectKey>";request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"];// 设置回调参数request.callbackParam = @{ @"callbackUrl": @"<your server callback address>", @"callbackBody": @"<your callback body>" };// 设置自定义变量request.callbackVar = @{ @"<var1>": @"<value1>", @"<var2>": @"<value2>" };request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};OSSTask * task = [client putObject:request];[task continueWithBlock:^id(OSSTask *task) { if (task.error) { OSSLogError(@"%@", task.error); } else { OSSPutObjectResult * result = task.result; NSLog(@"Result - requestId: %@, headerFields: %@, servercallback: %@", result.requestId, result.httpResponseHeaderFields, result.serverReturnJsonString); } return nil;}]; 分片上传因为篇幅的原因,分片上传参考:分片上传 断点续传 特别注意: 断点续传暂时只支持上传本地文件。 对于移动端来说,如果不是比较大的文件,不建议使用这种方式上传,因为断点续传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。** 在无线网络下,上传比较大的文件持续时间长,可能会遇到因为网络条件差、用户切换网络等原因导致上传中途失败,整个文件需要重新上传。为此,SDK提供了断点上传功能。 在上传前,可以指定断点记录的保存文件夹。若不进行此项设置,断点上传只在本次上传生效,某个分片因为网络原因等上传失败时会进行重试,避免整个大文件重新上传,节省重试时间和耗用流量。如果设置了断点记录的保存文件夹,如果任务失败,在下次重新启动任务,上传同一文件到同一Bucket、Object时,如果用户设置取消时不删除断点记录。再次上传将从断点记录处继续上传。详见随后的范例。 断点续传失败时,如果同一任务一直得不到续传,可能会在OSS上积累无用碎片。对这种情况,可以为Bucket设置lifeCycle规则,定时清理碎片。参考:生命周期管理。 出于碎片管理的原因,如果在断点续传时取消当前任务。默认会同步清理已经上传到服务器的分片。如果取消时需要保留断点上传记录,需要指定断点记录的保存文件夹并修改deleteUploadIdOnCancelling参数。需要注意,如果本地保留记录时间过长,且Bucket设置lifeCycle规则定时清理了服务端分片。会出现服务端和移动端记录不一致的问题。 说明: 断点续传的实现依赖InitMultipartUpload/UploadPart/ListParts/CompleteMultipartUpload/AbortMultipartUpload,如果采用STS鉴权模式,请注意加上这些API所需的权限。 断点续传也支持上传后回调通知,用法和上述普通上传回调通知一致。 断点续传已经默认开启每个分片上传时的Md5校验,请勿重复在request中设置Content-Md5头部。 在本地持久保存断点记录的调用方式(默认是不设置): OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = OSS_BUCKET_PRIVATE;//...NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];resumableUpload.recordDirectoryPath = cachesDir; 断点续传功能实现 // 获得UploadId进行上传,如果任务失败并且可以续传,利用同一个UploadId可以上传同一文件到同一个OSS上的存储对象OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = <bucketName>;resumableUpload.objectKey = <objectKey>;resumableUpload.partSize = 1024 * 1024;resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];//设置断点记录文件resumableUpload.recordDirectoryPath = cachesDir;//设置NO,取消时,不删除断点记录文件,如果不进行设置,默认YES,是会删除断点记录文件,下次再进行上传时会重新上传。resumableUpload.deleteUploadIdOnCancelling = NO;resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:<your file path>];OSSTask * resumeTask = [client resumableUpload:resumableUpload];[resumeTask continueWithBlock:^id(OSSTask *task) { if (task.error) { NSLog(@"error: %@", task.error); if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) { // 该任务无法续传,需要获取新的uploadId重新上传 } } else { NSLog(@"Upload file success"); } return nil;}];// [resumeTask waitUntilFinished];// [resumableUpload cancel]; 数据完整性校验因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。 MD5校验 需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的完整性。 OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = BUCKET_NAME;...request.contentMd5 = [OSSUtil fileMD5String:filepath]; CRC校验 与MD5相比,CRC64可以同时上传并计算CRC值。 // 构造上传请求OSSPutObjectRequest * request = [OSSPutObjectRequest new];request.bucketName = OSS_BUCKET_PRIVATE;///....request.crcFlag = OSSRequestCRCOpen;// 开启crc效验后。如果在传输中数据不一致,会提示OSSClientErrorCodeInvalidCRC 错误。OSSTask * task = [_client putObject:request];[[task continueWithBlock:^id(OSSTask *task) { //如果crc效验失败,会有error XCTAssertNil(task.error); return nil;}] waitUntilFinished];

2019-12-01 23:14:08 0 浏览量 回答数 0

回答

ConvertOfficeFormat 该接口实现 OFFICE 文档格式的转换,用于文档打印、预览等场景。 它采用 同步请求 方式执行,执行完毕返回转换成功的页数。注意,同步转换超时时间为 5秒,如果大于 5秒 的转换需要使用异步接口 CreateOfficeConversionTask 。 请求参数 名称 类型 是否必填 描述 Project String 是 项目名 Action String 是 ConvertOfficeFormat SrcUri String 是 源数据的存储位置, OSS 资源采用如下格式”oss://bucket1/object” SrcType String 否 源数据的后缀类型,当前文档转换根据 OSS 对象的后缀名来确定源数据类型,当 OSS 对象没有后缀名时,可以设置该值 TgtType String 是 转换输出目标文件类型: vector,转成向量文件,需要使用 js 引擎来进行渲染 png,转成 png 格式的图片文件 jpg,转成 jpg 格式的图片文件 pdf,转成 pdf 文件 text,转成只包含文本内容的文件,主要用来提取文件的文本内容,注意只支持演示和表格文件类型 TgtUri String 是 转换输出内容到目标位置,建议 TgtUri 和 SrcUri 在同一个桶,便于权限管理 例如 OSS 桶的指定前缀”oss://bucket1/converttasks/session123/“ Password String 否 Office 文档的打开密码,如果需要转换有密码的文档,请设置该字段 StartPage int 否 从第 x 页开始转换,默认为1 EndPage int 否 转换至第 x 页,默认为200,如果需要转换全部页,设置为-1 MaxSheetRow int 否 表格文件转换最大行数,默认为1000。如果需要转换所有行,设置为-1 MaxSheetCol int 否 表格文件转换最大列数,默认为100,如果需要转换所有行,设置为-1 MaxSheetCount int 否 表格文件转换最多 sheet 数,如果需要转换所有Sheet,设置为-1 FitToPagesTall bool 否 表格文件转 pdf 时,将行全部输出到一页,默认为 false,只有设置 TgtType 为 pdf 时才会生效 FitToPagesWide bool 否 表格文件转 pdf 时,将列全部输出在一页,默认为 false,只有设置 TgtType 为 pdf 时才会生效 TgtFilePrefix String 否 转换后的文件名称前缀,在目标类型为 jpg, png, pdf 时才生效,可以是英文,数字,横划线,下划线,长度不超过256个字符,参考自定义目标文件名称 TgtFileSuffix String 否 转换后的文件名称后缀,在目标类型为 jpg, png, pdf 时才生效,可以是英文,数字,横划线,下划线,点号,长度不超过256个字符,参考自定义目标文件名称 TgtFilePages String 否 转换后输出指定文件页数,在目标类型为 jpg, png, pdf时才生效,默认输出所有页。例如:[1, 2, 100],只会输出1,2,100页到 TgtUri,最多指定100个页数,如果超过100页,请分多次转换进行提交 PdfVector bool 否 pdf 转换成 vector 时,是否使用向量模式,默认为 false true:使用向量模式,预览效果比较清晰,转换耗时较长 false:使用图片模式,预览效果一般,转换耗时较短 Hidecomments bool 否 word, ppt 转换成 vector, jpg, png 时,是否隐藏批注和应用修订,默认为 false true:隐藏批注,应用修订 false:显示批注和修订 DisplayDpi int 否 转换 jpg,png 时,设置图片分辨率,取值范围[96, 2048] 目前支持的 输入文件类型 包含如下 48 种格式: 演示文件:pptx、ppt、pot、potx、pps、ppsx、dps、dpt、pptm、potm、ppsm。 表格文件:xls、xlt、et、ett、xlsx、xltx、csv、xlsb、xlsm、xltm。 文字文件:doc、dot、wps、wpt、docx、dotx、docm、dotm。 其他格式文件: pdf、 lrc、 c、 cpp、 h、 asm、 s、 java、 asp、 bat、 bas、 prg、 cmd、 rtf、 txt、 log、 xml、 htm、 html。 目前支持的 输出文件类型 有如下 4 种: vector 向量模式,使用智能媒体管理产品提供的 前端渲染引擎,更好的支持翻页、缩放。 jpg 模式,按文件样式每页生成一张 jpg 图片。 png 模式,按文件样式每页生成一张 png 图片。 pdf 模式,每个文件生成一个 pdf 文件。 text 模式,按文件样式每页生成一个 text 文件 返回参数 名称 类型 描述 RequestId String 用户发送的每次接口调用请求,无论成功与否,系统都会返回一个唯一识别码 RequestId 给用户 PageCount Integer 转换成功的页数 基于TgtUri返回TgtLoc,在OSS对象存储中的命名规则 基于 TgtUri 参数指定的前缀,比如/bucket1/imm-format-convert-tgt/session123/,根据转换目标类型的不同,那么生成的目标文件也有所不同: 目标类型为 vector 时 如果源文件为非 excel 类型 /bucket1/imm-format-convert-tgt/session123/doc/meta.json /bucket1/imm-format-convert-tgt/session123/doc/fp1.json /bucket1/imm-format-convert-tgt/session123/doc/fp2.json /bucket1/imm-format-convert-tgt/session123/doc/fp[...].json /bucket1/imm-format-convert-tgt/session123/doc/I/1 /bucket1/imm-format-convert-tgt/session123/doc/I/2 /bucket1/imm-format-convert-tgt/session123/doc/I/[...] 如果源文件为 excel 类型 /bucket1/imm-format-convert-tgt/session123/doc/meta.json /bucket1/imm-format-convert-tgt/session123/doc/s1/meta.json /bucket1/imm-format-convert-tgt/session123/doc/s1/fp1.json /bucket1/imm-format-convert-tgt/session123/doc/s1/fp2.json /bucket1/imm-format-convert-tgt/session123/doc/s1/fp[...].json /bucket1/imm-format-convert-tgt/session123/doc/s2/meta.json /bucket1/imm-format-convert-tgt/session123/doc/s2/fp1.json /bucket1/imm-format-convert-tgt/session123/doc/s2/fp2.json /bucket1/imm-format-convert-tgt/session123/doc/s2/fp[...].json /bucket1/imm-format-convert-tgt/session123/doc/s[...] /meta.json /bucket1/imm-format-convert-tgt/session123/doc/s[...]/fp1.json /bucket1/imm-format-convert-tgt/session123/doc/s[...]/fp2.json /bucket1/imm-format-convert-tgt/session123/doc/s[...]/fp[...].json 注意:vector 模式需要使用特定的 js 引擎进行渲染。 目标类型为 jpg 时 如果源文件为非 excel 类型 /bucket1/imm-format-convert-tgt/session123/1.jpg /bucket1/imm-format-convert-tgt/session123/2.jpg /bucket1/imm-format-convert-tgt/session123/[...].jpg 如果源文件为 excel 类型 /bucket1/imm-format-convert-tgt/session123/s1/1.jpg /bucket1/imm-format-convert-tgt/session123/s1/2.jpg /bucket1/imm-format-convert-tgt/session123/s1/[...].jpg /bucket1/imm-format-convert-tgt/session123/s2/1.jpg /bucket1/imm-format-convert-tgt/session123/s2/2.jpg /bucket1/imm-format-convert-tgt/session123/s2/[...].jpg /bucket1/imm-format-convert-tgt/session123/s[...]/1.jpg /bucket1/imm-format-convert-tgt/session123/s[...]/2.jpg /bucket1/imm-format-convert-tgt/session123/s[...]/[...].jpg 注意:源文件为 excel 类型时,会先根据 excel 的表格数,生成对应数量的文件夹,再在对应的文件夹下,生成对应数量的 jpg 文件 目标类型为 png 时 如果源文件为非 excel 类型 /bucket1/imm-format-convert-tgt/session123/1.png /bucket1/imm-format-convert-tgt/session123/2.png /bucket1/imm-format-convert-tgt/session123/[...].png 如果源文件为 excel 类型 /bucket1/imm-format-convert-tgt/session123/s1/1.png /bucket1/imm-format-convert-tgt/session123/s1/2.png /bucket1/imm-format-convert-tgt/session123/s1/[...].png /bucket1/imm-format-convert-tgt/session123/s2/1.png /bucket1/imm-format-convert-tgt/session123/s2/2.png /bucket1/imm-format-convert-tgt/session123/s2/[...].png /bucket1/imm-format-convert-tgt/session123/s[...]/1.png /bucket1/imm-format-convert-tgt/session123/s[...]/2.png /bucket1/imm-format-convert-tgt/session123/s[...]/[...].png 注意:源文件为 excel 类型时,会先根据 excel 的表格数,生产对应数量的文件夹,再在对应的文件夹下,生成对应数量的 png 文件 目标类型为 pdf 时 /bucket1/imm-format-convert-tgt/session123/1.pdf 注意:转换 pdf 时,无论源文件是什么类型,都只会生成一个 pdf 文件 目标类型为 text 时 /bucket1/imm-format-convert-tgt/session123/1.text /bucket1/imm-format-convert-tgt/session123/2.text /bucket1/imm-format-convert-tgt/session123/[...].text 注意:只支持演示类型和文字类型的源文件 重复请求处理 基于幂等性的要求, 两次相同操作以最后执行的请求为准。 如果两次执行操作的内容相同或者重复请求(内容相同,SignatureNonce 也相同),并且系统已经存在该任务,则后续的请求直接返回成功,避免消耗计算资源做相同的任务。 转换生成目标文件 生成的目标文件会持久化保存,推荐为某个桶下的 /imm-format-convert-tgt/${name} 路径,从而便于维护管理。 您可以主动删除转换后的目标文件,如果不主动删除则会长期保留以备使用,但是会占用存储空间。如果希望自动的删除目标文件,您也可以在 /imm-format-convert-tgt 前缀下配置 OSS 的生命周期,这样目标文件在到期后,会根据策略被清除。 自定义目标文件名称 当前文档转换通过设置 TgtFilePrefix 和 TgtFileSuffix 来支持自定义文件名称 假设 TgtType 为 jpg,则目标文件名称规则如下: TgtFilePrefix 和 TgtFileSuffix 都为空的条件下,目标文件名称为:[x].jpg TgtFilePrefix 为空,TgtFileSuffix 为 aa,则目标文件名称为:[x]aa TgtFilePrefix 为 aa,TgtFileSuffix 为空,则目标文件名称为:aa[x] TgtFilePrefix 为 aa,TgtFileSuffix 为 bb,则目标文件名称为:aa[x]bb 备注:[x] 表示多个目标文件,从1开始,如果转换后的文件有8页,则所有的目标文件为: aa[1]bb, aa[2]bb, …, aa[8]bb 示例 请求示例 POST https://imm.cn-shanghai.aliyuncs.com ?Action=ConvertOfficeFormat &Project=test &SrcUri="oss://bucket1/test.pptx" &TgtType=vector &TgtUri="oss://bucket1/imm-format-convert-tgt/session123/" ... 此处的示例,目的是展示关键参数,还需要其他的公共参数才能正常调用,推荐使用 SDK 来发送 API。 成功返回示例 { "RequestId": "FF3B7D81-66AE-47E0-BF69-157DCF187514", "PageCount": 10 } 特殊错误码 如果转换出错,在返回的 JSON 中会包含如下字段 { "RequestId": "7DA1FCD1-004C-4EB4-B039-C6BBDCEB0701", "HostId": "imm.cn-shanghai.aliyuncs.com", "Code": "DocumentConvertFailed.NeedPassword", "Message": "The conversion has been failed, need password to open file." } 错误代码 说明 OSSAccessError OSS 访问失败,请检查 SrcUri,TgtUri 对应的 bucket,路径是否存在,所在 Region 是否和 IMM Region 一致 InvalidParameter.SrcType.NotSupported 不支持的文件类型,当前文档转换根据文件后缀名来判断文件类型,请检查文件后缀名,SrcType 参数 DocumentConvertFailed.ExceedFileSizeLimit 当前文档转换默认支持 40 MB 文件大小,超过该大小的文件转换时会抛出该错误 DocumentConvertFailed.OpenFileError 转换时,打开文件失败,请检查源文档后缀和内容是否匹配 DocumentConvertFailed.ExportFileError 转换时,处理文件内容失败,请检查源文档是否能够正常打开 DocumentConvertFailed.NeedPassword 该文档需要密码才能打开,请设置 Password 参数 ExecutionTimeout 执行超时,请检查文档大小,页数,如果确实需要转换,请使用异步接口 CreateOfficeConversionTask InternalError 内部错误,请开工单并提供 RequestId

1934890530796658 2020-03-31 12:46:55 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播