TL;DR
如何將檔案路徑輸入AWS S3 API Ruby客戶端,并讓它們被解釋為影像,而不是字串字面的檔案路徑?
更多細節
<我正在使用 Ruby AWS S3 客戶端,以編程方式上傳圖片。我從他們的示例啟動代碼中提取了這段代碼,自己幾乎沒有修改。參見
當你點擊附件鏈接時顯示的檔案路徑
就我在客戶端檔案中所看到的,這應該是可行的。
。
客戶端檔案
此外,通過前端手動上傳該檔案也能正常作業,因此這肯定是我的代碼中存在的問題。
你應該如何讓 AWS 知道它應該將該檔案路徑解釋為檔案路徑,而不僅僅是一個字串字面?
uj5u.com熱心網友回復:
他們的檔案看起來有點奇怪,而且不直截了當,但似乎你可能需要傳入一個檔案/io物件,而不是路徑。
ruby docs here有一個這樣的例子:
s3_client.put_object(
:bucket_name => 'mybucket'/span>,
:key => 'some/key'.
:content_length => File.size('myfile.txt')
) do|buffer|
File.open('myfile.txt') do |io|)
buffer.write(io.read(length)) until io.eof?
end
end end
或者在aws ruby sdk docs中的另一個選項,在 "從磁盤流式傳輸檔案 "下:
File.open('/source/file/path', 'rb') do |file|
s3.put_object(bucket: 'bucket-name'/span>, key: 'object-key', body: file)
結束。
uj5u.com熱心網友回復:
你有兩個問題:
- 你在
object_uploaded?中的變數賦值的末尾有逗號,這影響了你的變數的存盤方式。洗掉這些。 - 你需要將檔案作為一個檔案物件型別來參考,而不是作為一個檔案路徑。 像這樣:
image = File.open("#{Rails.root}/tmp/cosn_img.jpeg"/span>)
請看下面的完整代碼:
def object_uploaded? (image, s3_client, bucket_name, object_key)
回應 = s3_client.put_object(
body: image,
acl: "public-read"/span>,
bucket: bucket_name,
key: object_key
)
將回應放在
if response.etag
return true
else
return false
end
rescue StandardError => e
puts "Error uploading object: #{e.message}"
return false
end
完整的呼叫示例:
def run_me
image = File.open("#{Rails.root}/tmp/cosn_img.jpeg" )
bucket_name = 'cosn-images'"#{order_number}-trello-pic_#{list_config[:ac_campaign_id]}.jpeg"
region = 'us-west-2'
s3_client = Aws::S3::Client.new(region:/span> region)
if object_uploaded? (image, s3_client, bucket_name, object_key)
puts "Object '#{object_key}' uploaded to bucket '#{bucket_name}' 。
else
puts "Object '#{object_key}' not uploaded to bucket '#{bucket_name}' 。
結束。
end。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/307013.html
標籤:
下一篇:<p>我有一個陣列,其中包含哈希值。 <preclass="defaults-code-block"><codeclass="hljslan
