diff options
author | George Claghorn <george@basecamp.com> | 2019-04-26 08:14:06 -0400 |
---|---|---|
committer | George Claghorn <george@basecamp.com> | 2019-04-26 08:14:06 -0400 |
commit | 61b2f3d336e115dc77cf6a2d80452f392c2045bf (patch) | |
tree | 603a9ee1835b11e70b5ebf3726bcd9a6aaef9680 /activestorage/lib | |
parent | c7f0aaf0a295cc1285376957dd67dfe82364a111 (diff) | |
download | rails-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/lib')
-rw-r--r-- | activestorage/lib/active_storage/service/s3_service.rb | 4 |
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 |