mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Differentiate between io streams and read data
This commit is contained in:
parent
8da081c36f
commit
ccaba581c0
7 changed files with 16 additions and 16 deletions
|
@ -11,16 +11,16 @@ class ActiveFile::Blob < ActiveRecord::Base
|
||||||
class_attribute :site
|
class_attribute :site
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def build_after_upload(data:, filename:, content_type: nil, metadata: nil)
|
def build_after_upload(io:, filename:, content_type: nil, metadata: nil)
|
||||||
new.tap do |blob|
|
new.tap do |blob|
|
||||||
blob.filename = name
|
blob.filename = name
|
||||||
blob.content_type = content_type # Marcel::MimeType.for(data, name: name, declared_type: content_type)
|
blob.content_type = content_type # Marcel::MimeType.for(data, name: name, declared_type: content_type)
|
||||||
blob.upload data
|
blob.upload io
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_after_upload!(data:, filename:, content_type: nil, metadata: nil)
|
def create_after_upload!(io:, filename:, content_type: nil, metadata: nil)
|
||||||
build_after_upload(data: data, filename: filename, content_type: content_type, metadata: metadata).tap(&:save!)
|
build_after_upload(io: io, filename: filename, content_type: content_type, metadata: metadata).tap(&:save!)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -38,8 +38,8 @@ class ActiveFile::Blob < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def upload(data)
|
def upload(io)
|
||||||
site.upload(key, data)
|
site.upload(key, io)
|
||||||
|
|
||||||
self.checksum = site.checksum(key)
|
self.checksum = site.checksum(key)
|
||||||
self.byte_size = site.byte_size(key)
|
self.byte_size = site.byte_size(key)
|
||||||
|
|
|
@ -3,7 +3,7 @@ class ActiveFile::Site
|
||||||
def initialize
|
def initialize
|
||||||
end
|
end
|
||||||
|
|
||||||
def upload(key, data)
|
def upload(key, io)
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -9,9 +9,9 @@ class ActiveFile::Sites::DiskSite < ActiveFile::Site
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def upload(key, data)
|
def upload(key, io)
|
||||||
File.open(make_path_for(key), "wb") do |file|
|
File.open(make_path_for(key), "wb") do |file|
|
||||||
while chunk = data.read(65536)
|
while chunk = io.read(65536)
|
||||||
file.write(chunk)
|
file.write(chunk)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,8 +8,8 @@ class ActiveFile::Sites::GCSSite < ActiveFile::Site
|
||||||
@bucket = @client.bucket(bucket)
|
@bucket = @client.bucket(bucket)
|
||||||
end
|
end
|
||||||
|
|
||||||
def upload(key, data)
|
def upload(key, io)
|
||||||
bucket.create_file(data, key)
|
bucket.create_file(io, key)
|
||||||
end
|
end
|
||||||
|
|
||||||
def download(key)
|
def download(key)
|
||||||
|
|
|
@ -5,8 +5,8 @@ class ActiveFile::Sites::MirrorSite < ActiveFile::Site
|
||||||
@sites = sites
|
@sites = sites
|
||||||
end
|
end
|
||||||
|
|
||||||
def upload(key, data)
|
def upload(key, io)
|
||||||
perform_across_sites :upload, key, data
|
perform_across_sites :upload, key, io
|
||||||
end
|
end
|
||||||
|
|
||||||
def download(key)
|
def download(key)
|
||||||
|
|
|
@ -8,8 +8,8 @@ class ActiveFile::Sites::S3Site < ActiveFile::Site
|
||||||
@bucket = @client.bucket(bucket)
|
@bucket = @client.bucket(bucket)
|
||||||
end
|
end
|
||||||
|
|
||||||
def upload(key, data)
|
def upload(key, io)
|
||||||
object_for(key).put(body: data)
|
object_for(key).put(body: io)
|
||||||
end
|
end
|
||||||
|
|
||||||
def download(key)
|
def download(key)
|
||||||
|
|
|
@ -22,6 +22,6 @@ class ActiveFile::BlobTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
private
|
private
|
||||||
def create_blob(data: "Hello world!", filename: "hello.txt", content_type: "text/plain")
|
def create_blob(data: "Hello world!", filename: "hello.txt", content_type: "text/plain")
|
||||||
ActiveFile::Blob.create_after_upload! data: StringIO.new(data), filename: filename, content_type: content_type
|
ActiveFile::Blob.create_after_upload! io: StringIO.new(data), filename: filename, content_type: content_type
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue