2011-01-19 205 views
0
body = "<CreateBucketConfiguration><LocationConstraint>EU</LocationConstraint></CreateBucketConfiguration>" 

     content_length = body.bytesize 
     content_type = "text/plain" 

     url = URI.parse("http://#{@name}.s3.amazonaws.com/") 

     req = Net::HTTP::Put.new(url.path) 
     req.body = body 
     req.add_field 'Date' , @time 
     req.add_field 'Host', "#{@name}.s3.amazonaws.com" 
     req.add_field 'Content-Type', "#{content_type}" 
     req.add_field 'Authorization', "#{signature}" 
     req.add_field 'Content-Length', "#{content_length}" 

     response = Net::HTTP.new(url.host, url.port).start do |http| 
      http.request(req) 
     end 

     puts response.read_body 

返回200並創建存儲桶,但在美國標準中,而不在歐盟地區。我在這裏錯過了什麼?謝謝您的幫助。無法在歐盟地區創建s3存儲桶


這裏是整個對話

PUT/HTTP/1.1  
Accept: */*  
User-Agent: Ruby  
Date: Wed, 19 Jan 2011 22:14:31 -0800  
Host: mytest.s3.amazonaws.com  
Content-Type: text/plain  
Authorization: AWS AC8RVKAXAU8Q:41uTqvfncc2mE561YabgpGUouio=  

Content-Length: 146 

<CreateBucketConfiguration xmlns='http://s3.amazonaws.com/doc/2006-03-01/'> 
    <LocationConstraint>EU</LocationConstraint> 
</CreateBucketConfiguration> 

HTTP/1.1 200 OK  
x-amz-id-2: lrlPt8Y19ZxFXPbZf9Gf6dYxTGLYkkMzo0tSNXCNk29o9xghcob502mcttQ/oo4W  
x-amz-request-id: 3504CCA0E7AFFE95  
Date: Thu, 20 Jan 2011 06:14:32 GMT  
Location: /mytest  
Content-Length: 0  
Server: AmazonS3 

HTTP/1.1 400 Bad Request  
Transfer-Encoding: chunked  
Date: Thu, 20 Jan 2011 06:14:32 GMT  
Connection: close  
Server: AmazonS3 

0 
+0

爲什麼不使用霧寶石做到這一點。這真的很好,你可以在 – shingara 2011-01-19 11:23:08

+0

裏面定義你的s3區域爲什麼不安裝http sniffer並查看發送給s3的是什麼 – 2011-01-19 20:50:07

回答

0

,我可以看到的唯一的事情是,你還沒有包括在請求主體的xmlns - 不知道這將使任何區別,但。

xmlns="http://s3.amazonaws.com/doc/2006-03-01/"

body = "<CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><LocationConstraint>EU</LocationConstraint></CreateBucketConfiguration>"