OSS在完成文件(Object)上传时可以提供回调(Callback)给应用服务器。您只需要在发送给OSS的请求中携带相应的Callback参数,即可实现上传回调。

注意事项

您在上传文件时可以指定上传回调。文件上传成功后,OSS会向您提供的服务器地址发起HTTP POST请求,您可以在收到回调时执行相应的操作

  • callback的URL不能包含query string,query string须在:query参数中指定。
  • 如果出现文件上传成功,但是执行回调失败时,client会抛出CallbackError。用户如果忽略此错误,需要显式处理这个异常。
  • 关于接收回调的server,请参见callback_server.rb

示例代码

仅支持通过put_object以及resumable_upload上传文件时设置上传回调。

使用put_object上传文件时指定上传回调

使用put_object上传文件时指定了上传回调,并将此次上传的Bucket和Object信息添加在body中。如果应用服务器收到这个回调,则表明文件已成功上传到OSS了。

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  access_key_id: 'AccessKeyId', access_key_secret: 'AccessKeySecret')
# 填写Bucket名称,例如examplebucket。
bucket = client.get_bucket('examplebucket')

callback = Aliyun::OSS::Callback.new(
  url: 'http://oss-demo.aliyuncs.com:23450',
  query: {user: 'put_object'},
  body: 'bucket=${bucket}&object=${object}'
)

begin
  bucket.put_object('files/hello', file: '/tmp/x', callback: callback)
rescue Aliyun::OSS::CallbackError => e
  puts "Callback failed: #{e.message}"
end

使用resumable_upload上传文件时指定上传回调

resumable_upload的调用方法与put_object类似。

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  access_key_id: 'AccessKeyId', access_key_secret: 'AccessKeySecret')
# 填写Bucket名称,例如examplebucket。
bucket = client.get_bucket('examplebucket')

callback = Aliyun::OSS::Callback.new(
  url: 'http://oss-demo.aliyuncs.com:23450',
  query: {user: 'put_object'},
  body: 'bucket=${bucket}&object=${object}'
)

begin
  bucket.resumable_upload('files/hello', '/tmp/x', callback: callback)
rescue Aliyun::OSS::CallbackError => e
  puts "Callback failed: #{e.message}"
end

相关文档

  • 关于上传回调的完整示例代码,请参见GitHub示例
  • 关于上传回调的API接口说明,请参见Callback