Hi all,
I’m needing to extend the Paperclip Storage module to handle external
URL’s so that I can upload my doc’s/images to an external source rather
than the app’s local file system.
The FileSystem module reads
module Filesystem
def self.extended base
end
def exists?(style = default_style)
if original_filename
File.exist?(path(style))
else
false
end
end
# Returns representation of the data of the file assigned to the
given
# style, in the format most representative of the current storage.
def to_file style = default_style
@queued_for_write[style] || (File.new(path(style)) if
exists?(style))
end
alias_method :to_io, :to_file
def flush_writes #:nodoc:
@queued_for_write.each do |style, file|
FileUtils.mkdir_p(File.dirname(path(style)))
result = file.stream_to(path(style))
file.close
result.close
end
@queued_for_write = {}
end
def flush_deletes #:nodoc:
@queued_for_delete.each do |path|
begin
FileUtils.rm(path) if File.exist?(path)
rescue Errno::ENOENT => e
# ignore file-not-found, let everything else pass
end
end
@queued_for_delete = []
end
end
Now I figured that I should be able to make use of Open-URI to emulate
the above functionality so that Paperclips expected behaviour is fully
implemented.
What I could do with is a good resource that can show me how I can
emulate the same functionality with Open-URI.
Any pointers to good examples, ideas, code snippets, examples, help
etc… would be greatly appreciated
You’re probably better off starting by looking at Paperclip’s S3
support, which is logically closer to what you want to do.
–Matt J.
On Oct 3, 10:15 am, James W. [email protected]
Matt J. wrote:
You’re probably better off starting by looking at Paperclip’s S3
support, which is logically closer to what you want to do.
–Matt J.
On Oct 3, 10:15�am, James W. [email protected]
Thank you Matt
I’m struggling to understand how the right_aws functionality works so I
can emulate it.
I have so far been able to implement the file_exist? function using
Net::FTP as follows
def exists?(style = default_style)
if original_filename
result = false
Net::FTP.open(domain_name) do |ftp|
#Need to implement domain_name, username and password
params.
#Probably best to emulate the way S3 module does this with a
yml file?
ftp.login(‘myusername’, ‘mypassword’)
ftp.chdir(path(style))
begin
ftp.list(file_name)
true
rescue
#Need to extend this to raise all errors except file not
found
#Need to add specific check for file not found exception
result = false
# puts $!
end
end
end
end
I’m now looking at how I can code the to_file method
def to_file style = default_style
#This adds some kind of file stream (I think) to the
@queued_for_write hash array. I need to understand how to do this for a
NET::FTP connection.
@queued_for_write[style] || (File.new(path(style), ‘rb’) if
exists?(style))
end
I need to understand exactly what that is doing first though lol!
The flush_writes method should be pretty easy to implement. (I’ve worked
out how to use NET::FTP to make a directory and I’m sure the move and
chmod functions shouldn’t be too difficult once I have the syntax for
those.
It’s a huge learning curve for me but I’m getting there (slowly lol)
Still, any help or pointers would be really really appreciated