如何在Rails中验证AWS S3放置响应

时间:2019-03-01 04:24:32

标签: ruby-on-rails amazon-s3 aws-sdk

我在Rails项目中使用aws-skd-s3 gem。

创建S3资源

s3 = Aws::S3::Resource.new(access_key_id: #####,
        secret_access_key: #####,
        region: 'us-east-1')

创建一个S3对象

path = 'sample'
key = test.csv
obj = s3.bucket(#{bucket_name}).object("#{path}" + key)

在S3中存储CSV

obj.put(body: csv_response, content_type: 'text/csv')

如何验证put方法将csv存储在S3中而没有任何问题?

S3中的put方法是否可以使用任何状态码进行验证?

2 个答案:

答案 0 :(得分:1)

一种我见过或读过其他人的方法是在上传之前计算原始文件的md5哈希值,然后将其与etag响应中的obj.put值进行匹配

答案 1 :(得分:1)

两种解决方法:

  1. 存储结果。它应该是PutObjectOutput类型的对象。您可以查看put请求方法的official方法文档。
  2. 第二种解决方法是在您的放置请求完成后立即进行exists?呼叫。像这样:
   s3 = Aws::S3::Resource.new(region: 'ap-southeast-1') # change to the region you use
   obj = s3.bucket('bucket-name').object("path/to/object/in/bucket")
   if obj.exists?
     # Object was uploaded successfully!
   else
     # No it wasn't!
   end

希望有帮助!