aboutsummaryrefslogtreecommitdiffstats
path: root/activestorage
diff options
context:
space:
mode:
authorGeorge Claghorn <george@basecamp.com>2019-04-26 08:14:06 -0400
committerGeorge Claghorn <george@basecamp.com>2019-04-26 08:14:06 -0400
commit61b2f3d336e115dc77cf6a2d80452f392c2045bf (patch)
tree603a9ee1835b11e70b5ebf3726bcd9a6aaef9680 /activestorage
parentc7f0aaf0a295cc1285376957dd67dfe82364a111 (diff)
downloadrails-61b2f3d336e115dc77cf6a2d80452f392c2045bf.tar.gz
rails-61b2f3d336e115dc77cf6a2d80452f392c2045bf.tar.bz2
rails-61b2f3d336e115dc77cf6a2d80452f392c2045bf.zip
Halve string allocations in S3 streaming and partial downloads
See 19770d6.
Diffstat (limited to 'activestorage')
-rw-r--r--activestorage/lib/active_storage/service/s3_service.rb4
1 files changed, 2 insertions, 2 deletions
diff --git a/activestorage/lib/active_storage/service/s3_service.rb b/activestorage/lib/active_storage/service/s3_service.rb
index bf94f3f49e..c7e4ec96a2 100644
--- a/activestorage/lib/active_storage/service/s3_service.rb
+++ b/activestorage/lib/active_storage/service/s3_service.rb
@@ -40,7 +40,7 @@ module ActiveStorage
def download_chunk(key, range)
instrument :download_chunk, key: key, range: range do
- object_for(key).get(range: "bytes=#{range.begin}-#{range.exclude_end? ? range.end - 1 : range.end}").body.read.force_encoding(Encoding::BINARY)
+ object_for(key).get(range: "bytes=#{range.begin}-#{range.exclude_end? ? range.end - 1 : range.end}").body.string.force_encoding(Encoding::BINARY)
rescue Aws::S3::Errors::NoSuchKey
raise ActiveStorage::FileNotFoundError
end
@@ -108,7 +108,7 @@ module ActiveStorage
raise ActiveStorage::FileNotFoundError unless object.exists?
while offset < object.content_length
- yield object.get(range: "bytes=#{offset}-#{offset + chunk_size - 1}").body.read.force_encoding(Encoding::BINARY)
+ yield object.get(range: "bytes=#{offset}-#{offset + chunk_size - 1}").body.string.force_encoding(Encoding::BINARY)
offset += chunk_size
end
end