全部產品
Search
文件中心

Object Storage Service:Ruby上傳回調

更新時間:Feb 28, 2024

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',
    # 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# 填寫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',
    # 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# 填寫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