LoginSignup
8

More than 5 years have passed since last update.

AWS SDK for RubyでアップロードしたS3オブジェクトからContent-Typeヘッダが取れない

Last updated at Posted at 2014-01-20

AWS SDKを使ってアップロードして、S3からDLするとContent-Typeヘッダが空になっていることがありました。
S3のマネージメントコンソール上からはimage/jpegの設定がされてるように見えたのになぜ・・・?

sample1.rb
require "aws"
s3 = AWS::S3.new
bucket = s3.buckets["my-test-bucket"]
object = bucket.objects["obj-key"]

object.write("test text")
$ curl -i https://s3-ap-northeast-1.amazonaws.com/my-test-bucket/obj-key
HTTP/1.0 200 Connection established

HTTP/1.1 200 OK
Date: Mon, 20 Jan 2014 00:37:31 GMT
Last-Modified: Mon, 20 Jan 2014 00:29:00 GMT
Accept-Ranges: bytes
Content-Type:
Content-Length: 9
Server: AmazonS3

test text

調べてみたところ、S3アップロード時にContent-Typeを指定してやる必要がありました。
S3マネージメントコンソール上でimage/jpegが設定されてるように見えるのは、プルダウンの初期値が見えてるだけで設定されているわけではありませんでした。
AWS SDK for RubyでContent-Typeヘッダを設定するには以下のような感じでやります。

sample2.rb
require "aws"
s3 = AWS::S3.new
bucket = s3.buckets["my-test-bucket"]
object = bucket.objects["obj-key2"]

object.write("test text", content_type: "text/plain")
$ curl -i https://s3-ap-northeast-1.amazonaws.com/my-test-bucket/obj-key2
HTTP/1.0 200 Connection established

HTTP/1.1 200 OK
Date: Mon, 20 Jan 2014 00:49:13 GMT
Last-Modified: Mon, 20 Jan 2014 00:48:50 GMT
Accept-Ranges: bytes
Content-Type: text/plain
Content-Length: 9
Server: AmazonS3

test text

ちなみに、既にアップロード済みのファイルにContent-Typeヘッダを付けるなら#copy_fromを使えばOKでした。

sample3.rb
require "aws"
s3 = AWS::S3.new
bucket = s3.buckets["my-test-bucket"]
object = bucket.objects["obj-key3"]

object.exists? #=> true
object.head.to_h[:content_type] #=> ""

object.copy_from(object, content_type:"text/plain")

object.head.to_h[:content_type] #=> "text/plain"

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8