我为空文件夹创建对象,但无法将其放在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
答案 0 :(得分:0)
由于我不确定您要问什么,因此我将向您简要介绍如何在S3中创建对象。
put_object
和put
方法是在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的答案。