如何使用Rails在S3上上传空文件夹

时间:2019-03-08 05:41:48

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

我为空文件夹创建对象,但无法将其放在S3上。 我正在使用宝石'aws-sdk','<2.0'

我尝试了'put'方法,并且也尝试了'put_object',但是我无法使其正常工作。谁能帮我吗?

我与put_object一起使用的代码是:

${errorString}

我收到的错误是:

 key = 'folder'+'/'+subfolder+'/'    
    folder_key = S3_BUCKET.objects[key]
    folder_key.put_object

使用“ put”方法时:

error : undefined method `put_object' for <AWS::S3::S3Object:bucketname/folder/subfolder/>:AWS::S3::S3Object

我收到的错误是:

    folder_key.put()

其中S3_BUCKET定义了S3的凭据。

在此为文件夹创建文件夹密钥对象,但如何将其存储在s3

2 个答案:

答案 0 :(得分:0)

由于我不确定您要问什么,因此我将向您简要介绍如何在S3中创建对象。

put_objectput方法是在S3 :: Client类而不是对象存储桶上定义的。这就是为什么收到错误消息的原因-它们不是S3Object类上的方法。

考虑到这一点,您首先需要实例化一个S3客户端:

profile_name = 'Rinkal'
region = 'us-east-1'
s3 = Aws::S3::Client.new(profile: profile_name, region: region)

您现在可以通过我们刚创建的客户端与S3进行交互。当然,这是假设您已正确配置S3身份验证-有关here.

的更多信息

假设您具有存储桶名称(在您的代码中似乎是folder_key),然后可以在该存储桶中创建一个对象:

s3.put_object(bucket: folder_key, key: "file", body: "Rinkal's s3 object")

如果您要创建存储桶而不是对象,则可以使用以下代码进行操作:

s3.create_bucket(bucket: 'my-bucket')

希望有帮助。

答案 1 :(得分:0)

在S3中没有“文件夹”这样的概念。我认为您指的是键前缀,它看起来像文件名之前的文件夹路径,但不是。

S3只是一个键值存储。 键是一个唯一的字符串值是一个斑点

要限定密钥,人们经常使用诸如密钥之类的路径,并且S3控制台支持这种格式来向下钻取文件夹样式结构,从而使手动查找对象更加容易。这只是按键上的文本过滤器,就像startsWith()过滤器一样。

如果您没有带有特定键前缀的对象,则所谓的路径不存在。

尚不能100%清楚您要达到的目标,但总之:

  

在上传带有新前缀的文件之前,无需创建文件夹。只需使用所需密钥上传对象。

有关如何在Rails中实现这一目标的信息,请参见Stuart的答案。