Repository is archived
No commit activity in last 3 years
No release in over 3 years
Adds support for storing the contents of files attachment via paperclip plugin on the database
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 3.0.0
 Project Readme

paperclip_database_storage

Adds support for storing a paperclip attachment file contents in a database table.

Requirements

paperclip_database_storage requires Paperclip version >= 3.2.0.

Installation

paperclip_database_storage is distributed as a gem, and that is how it should be used in your app.

Include the gem in your Gemfile, from rubygems:

  gem 'paperclip_database_storage', '>= 3.2.0'

Or, get the master branch from the repository:

  gem 'paperclip_database_storage', :git => 'git://github.com/gokuu/paperclip_database_storage.git'

And afterwards, run the task to create the necessary migrations:

  rake paperclip_database_storage:setup

Usage

All you need to do is, when defining a Paperclip attachment, set its :storage option as :database:

class MyModel < ActiveRecord::Base
  has_attached_file :attachment,
    :storage => :database,
    :styles => {
      :medium => "300x300>",
      :thumb => "100x100>"
    },
    :url => "/:class/:attachment/:id/:style/:basename.:extension"
end

Remarks

The migration defined by paperclip_database_storage contains several indexes, as every possible combination of the fields that can identify a single attachment. This should help getting an attachment as quickly as possible using any combination of parameters. As of version 3.0.7, the attachments are stored encoded in base64, to prevent loss of information. All previous stored attachments will still be usable as the table has a new field to indicate whether the attachment is stored base64-encoded.

Limitations

  • Paperclip-database currently only supports one database attachment per model.
  • Although you can define a custom :url option for getting the attachment, make sure you define one that uniquelly identifies each attachment, otherwise the plugin will raise an Exception.

TO-DO

  • Add tests!
  • Add support for more than one database attachment per model
  • Enable defining a separate table for each different attachment

Copyright (c) 2012 Pedro Rodrigues, released under the MIT license