S3에서 수백 또는 수천 개의 개체에 대해 일부 메타 데이터 (Content-Type)를 변경해야합니다. 루비로이 작업을 수행하는 좋은 방법은 무엇입니까? 지금까지는 fog.io으로 메타 데이터 만 저장할 방법이 없다는 것을 알게되면 전체 개체를 다시 저장해야합니다. the official sdk library을 사용하는 것 같이 보인다면이 하나의 작업만을위한 래퍼 환경을 필요로합니다.루비를 사용하여 S3 객체의 메타 데이터를 어떻게 업데이트합니까?
답변
맞습니다. 공식 SDK를 사용하면 개체 메타 데이터를 다시 업로드하지 않고 수정할 수 있습니다. 파일의 내용은 copy the object이지만 서버에 있으므로 파일을 다운로드하고 다시 업로드 할 필요가 없습니다.
래퍼는 미래의 독자
bucket.objects.each do |object|
object.metadata['content-type'] = 'application/json'
end
같은 것을 구현하기 쉬운 것입니다, 여기에 루비 AWS-SDK의 V1을 사용하여 물건을 변경하는 완전한 샘플입니다 (또한 AWS-SDK v2의이 Gist 참조 예제) 다음 V2의 API에서
# Using v1 of Ruby aws-sdk as currently v2 seems not able to do this (broken?).
require 'aws-sdk-v1'
key = YOUR_AWS_KEY
secret = YOUR_AWS_SECRET
region = YOUR_AWS_REGION
AWS.config(access_key_id: key, secret_access_key: secret, region: region)
s3 = AWS::S3.new
bucket = s3.buckets[bucket_name]
bucket.objects.with_prefix('images/').each do |obj|
puts obj.key
# Add metadata: {} to next line for more metadata.
obj.copy_from(obj.key, content_type: obj.content_type, cache_control: 'max-age=1576800000', acl: :public_read)
end
, 당신은 S3에서 다운로드하지 않고 객체의 메타 데이터를 업데이트 할 :metadata
및 :metadata_directive => 'REPLACE'
옵션 Object#copy_from()
또는 Object.copy_to()
를 사용할 수 있습니다. 기본적으로 AWS가 복사 작업 복사하므로 메타 데이터와 함께 제공되는 :metadata
무시되므로
Aws::S3::Errors::InvalidRequest: This copy request is illegal because it is trying to copy an object to itself without changing the object's metadata, storage class, website redirect location or encryption attributes.
이것은 :
Joost's gist의 코드는 오류를 던진다. 메타 데이터를 현재 위치에서 업데이트하려면 :metadata_directive => 'REPLACE'
옵션을 설정해야합니다.
require 'aws-sdk'
# S3 setup boilerplate
client = Aws::S3::Client.new(
:region => 'us-east-1',
:access_key_id => ENV['AWS_ACCESS_KEY'],
:secret_access_key => ENV['AWS_SECRET_KEY'],
)
s3 = Aws::S3::Resource.new(:client => client)
# Get an object reference
object = s3.bucket('my-bucket-name').object('my-object/key')
# Create our new metadata hash. This can be any hash; in this example we update
# existing metadata with a new key-value pair.
new_metadata = object.metadata.merge('MY_NEW_KEY' => 'MY_NEW_VALUE')
# Use the copy operation to replace our metadata
object.copy_to(object,
:metadata => new_metadata,
# IMPORTANT: normally S3 copies the metadata along with the object.
# we must supply this directive to replace the existing metadata with
# the values we supply
:metadata_directive => "REPLACE",
)
쉽게 재사용 :
def update_metadata(s3_object, new_metadata = {})
s3_object.copy_to(s3_object,
:metadata => new_metadata
:metadata_directive => "REPLACE"
)
end
캐시 제어를 사용하려면 object.copy_to (object, cache_control : 'public, max-age = 333333', metadata_directive : 'REPLACE')를 사용하십시오. –
일부 검색 후
은 여기에 최근 메타 데이터 업데이트 작업을 수행하는 데 사용되는 전체, 작업 코드 조각의 http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Object.html#copy_from-instance_method
보기 이것은 나를 위해 작동하는 것 같다
obj.copy_to(obj, :metadata_directive=>"REPLACE", :acl=>"public-read",:content_type=>"text/plain")
- 1. indexedDB에서 데이터를 어떻게 업데이트합니까?
- 2. 어떻게 다차원 배열을 사용하여 데이터를 업데이트합니까?
- 3. Amazon S3 SDK를 사용하여 메타 데이터를 업데이트하는 방법
- 4. s3cmd를 사용하여 Amazon S3 파일에 메타 데이터를 설정하려고 시도했습니다.
- 5. 루비를 사용하여, 어떻게 hudson의 postBuildResult에 필요한 hexBinary 데이터를 생성합니까?
- 6. 어떻게 데이터를 ASP 페이지로 계속 업데이트합니까?
- 7. 아이폰 앱은 인터넷에서 SQLite 데이터를 어떻게 업데이트합니까?
- 8. 이전에 선택한 데이터를 사용하여 "중복 키 값"을 어떻게 업데이트합니까?
- 9. 메타 데이터를 사용하여 자동 채우기
- 10. Amazon S3 메타 데이터로 업로드 하시겠습니까?
- 11. HttpWebRequest에서 UI를 어떻게 업데이트합니까?
- 12. 어떻게 메타 데이터를 f4v 파일에 삽입합니까?
- 13. rvm을 사용하여 레일에 루비를 어떻게 설치합니까?
- 14. 갤럭시 S3 용 뷰포트 메타 태그는 어떻게 사용할 수 있습니까?
- 15. addEventListener를 어떻게 업데이트합니까?
- 16. PivotalTracker.com은 실시간으로보기를 어떻게 업데이트합니까?
- 17. EclipseLink를 사용하여 MySQL에서 테이블의 열을 어떻게 업데이트합니까?
- 18. 어떻게 ArrayList를 사용하여 스피너를 동적으로 업데이트합니까?
- 19. PHP를 사용하여 mysql에서 상위 레코드를 어떻게 업데이트합니까?
- 20. 어떻게 UpdateView를 사용하여 장고 모델을 업데이트합니까?
- 21. ActionScript 3에서 복잡한 객체의 데이터를 어떻게 구조화해야합니까?
- 22. S3 메타 데이터 요청을 사용하여 ETag를 사용할 수 있습니까?
- 23. C# : 표시 필드 메타 데이터를 사용하여 System.Reflection.GetFields()
- 24. 기존 STDOUT을 어떻게 업데이트합니까?
- 25. SQL 어떻게 업데이트합니까?
- 26. Facebook의 상태를 어떻게 업데이트합니까?
- 27. IntelliJ IDEA를 어떻게 업데이트합니까?
- 28. CollectionChanged에서 IValueConverter를 어떻게 업데이트합니까?
- 29. 실행중인 EXE를 어떻게 업데이트합니까?
- 30. 보조보기를 어떻게 업데이트합니까?
자세한 내용은 http://groups.google.com/group/ruby-fog/browse_thread/thread/e632fc61405bf04c –
에서 x-amz-meta- prefix가있는 메타 데이터 만 추가됩니다. 일반 Content-Type 메타 데이터를 추가하는 방법은 무엇입니까? – serengeti12