module Pushfile::Data
Public Instance Methods
ajax_upload()
click to toggle source
Ajax upload
# File lib/pushfile/data.rb, line 23 def ajax_upload filename = @options[:filename] type = @options[:mimetype] || mimetype(filename) file = @options[:tempfile] || "/tmp/upload-#{filename}" # Pass stream (typically request.body) to read chunks if @options[:stream] File.open(file, 'w') do |f| f.binmode while buffer = @options[:stream].read(51200) f << buffer end end end {:filename => filename, :tempfile => File.new(file), :type => type} end
file_upload()
click to toggle source
File upload
# File lib/pushfile/data.rb, line 42 def file_upload o = @options[:file] || @options[:datafile] tmpfile, filename = o[:tempfile], o[:filename] type = o[:type] || mimetype(filename) {:filename => filename, :tempfile => tmpfile, :type => type} end
setup_data()
click to toggle source
Set up data
# File lib/pushfile/data.rb, line 8 def setup_data # Fetch the image into a tempfile, and store if @options[:url] url_upload elsif @options[:filename] ajax_upload # Do Froala or Dropzone file uploads elsif @options[:file] || @options[:datafile] file_upload end end
url_upload()
click to toggle source
URL upload
# File lib/pushfile/data.rb, line 51 def url_upload url = @options[:url].strip content = RestClient.get(url) rescue nil file = Tempfile.new('tmp').tap do |file| file.binmode # must be in binary mode file.write(content) file.rewind end if content # Extract the file name from the URL filename = url.split('/').last # Mime type type = @options[:mimetype] || mimetype(filename) {:filename => filename, :type => type, :tempfile => file} end
Private Instance Methods
mimetype(path)
click to toggle source
Get the mime type from a file name
# File lib/pushfile/data.rb, line 74 def mimetype(path) extension = File.basename(path).split('.')[-1] Rack::Mime.mime_type(".#{extension}") end