My form submits the file. The custom processor I made for Paperclip
uses FFMPEG. My custom processor expects a style to be set so that it
can process the audio based on that value. So for example, in my form,
I set stream_type to 30, my custom processor would process the audio
file to 30 seconds.
Walter, in your example. You already have a style set as a fixed
string (has_attached_file :pdf,:styles => { :text => { :fake =>
'variable' } },)
Your example is valid, because you are processing again after the file
is submitted. But, I don't want to reprocess. It would be a waste of
resources to do this twice. I want do it right the first time around.
On Oct 12, 12:17 pm, Walter Lee Davis <[email protected]> wrote:
> I built a system in Rails 2.3.8 that accepted PDF uploads and needed
> to extract their text content using the venerable (read ancient)
> pdftotext command-line utility. I had to jump through the following
> hoops to make it work, and this might have some bearing on your
> solution:
>
> #model
> has_attached_file :pdf,:styles => { :text => { :fake =>
> 'variable' } }, :processors => [:text]
> after_post_process :extract_text
>
> private
> def extract_text
> file = File.open("#{pdf.queued_for_write[:text].path}","r")
> plain_text = ""
> while (line = file.gets)
> plain_text << Iconv.conv('ASCII//IGNORE', 'UTF8', line)
> end
> self.plain_text = plain_text
> end
>
> #lib/paperclip_processors/text.rb
> module Paperclip
> # Handles extracting plain text from PDF file attachments
> class Text < Processor
>
> attr_accessor :whiny
>
> # Creates a Text extract from PDF
> def make
> src = @file
> dst = Tempfile.new([...@basename, 'txt'].compact.join("."))
> command = <<-end_command
> "#{ File.expand_path(src.path) }"
> "#{ File.expand_path(dst.path) }"
> end_command
>
> begin
> success = Paperclip.run("/usr/bin/pdftotext -nopgbrk",
> command.gsub(/\s+/, " "))
> Rails.logger.info "Processing #{src.path} to #{dst.path} in
> the text processor."
> rescue PaperclipCommandLineError
> raise PaperclipError, "There was an error processing the text
> for #...@basename}" if @whiny
> end
> dst
> end
> end
> end
>
> Within the environs of Paperclip, you can write processors that do
> pretty much anything, and usually result in a new file saved as a new
> format in the attachments hierarchy. Once that process is done, you
> can access the result file and do other stuff with it. But I'm not
> sure if that answers your question at all, since you don't seem to be
> facing the same problem I was.
>
> If your form posts a file to Paperclip, you don't get access to the
> file parts of that form submission directly in your controller, unless
> I'm missing something fundamental. But a processor can access them
> directly, at a very low level.
>
> Walter
>
> On Oct 12, 2010, at 12:01 AM, Christian Fazzini wrote:
>
> > Walter Lee, I am trying to pass a value (stream_type) that was in
> > submitted in my form to :styles using proc.
>
> > Radhames, even if I do all this in the model, without a processor, I
> > am still not able to get the value of stream_type, that was passed
> > when the form tried to submit.
>
> > So Philip, this means I would need to reprocess the file and delete
> > the original? This means I will be processing the file twice? Isn't
> > this a waste of resources if I only want one processed file that is
> > adherent to the stream_type?
>
> > On Oct 12, 12:07 am, Philip Hallstrom <[email protected]> wrote:
> >> has_attached_file gets read when the class file is first read. It
> >> then sets up the various paperclip methods that do there stuff.
> >> When it does that, 'instance' is a new/blank record.
>
> >> What you have below will work (if memory serves me right) if you
> >> save the record, reload it, and then reprocess it.
>
> >> Something along those lines... it's been awhile since I ran into
> >> this.
>
> >> -philip
>
> >> On Oct 10, 2010, at 1:22 PM, Christian Fazzini wrote:
>
> >>> anyone?? Been on this for days without a solution.... thinking
> >>> that I
> >>> may have to switch to another gem just to get this feature to
> >>> work...
>
> >>> On Oct 7, 3:16 pm, Christian Fazzini <[email protected]>
> >>> wrote:
> >>>> I have a stream_type field on my form. When the form submits,
> >>>> instance.stream_type is blank. To verify this, in my custom
> >>>> processor
> >>>> (class ProcessAudio < Processor), I do puts options[:geometry].
>
> >>>> has_attached_file :media,
> >>>> :styles => { :original => Proc.new { |instance|
> >>>> instance.stream_type } },
> >>>> :url => '/assets/artists/:artist_id/
> >>>> songs/:id/:style.:extension',
> >>>> :path => ':rails_root/public/assets/
> >>>> artists/:artist_id/songs/:id/:style.:extension',
> >>>> :processors => [:process_audio]
>
> >>>> If I provide a fixed string. For example:
>
> >>>> has_attached_file :media,
> >>>> :styles => { :original => '30' },
> >>>> :url => '/assets/artists/:artist_id/
> >>>> songs/:id/:style.:extension',
> >>>> :path => ':rails_root/public/assets/
> >>>> artists/:artist_id/songs/:id/:style.:extension',
> >>>> :processors => [:process_audio]
>
> >>>> puts options[:geometry] = 30. Why does is it NOT work with proc?
>
> >>>> What is wrong?
>
> >>> --
> >>> You received this message because you are subscribed to the Google
> >>> Groups "Ruby on Rails: Talk" group.
> >>> To post to this group, send email to [email protected]
> >>> .
> >>> To unsubscribe from this group, send email to
> >>> [email protected]
> >>> .
> >>> For more options, visit this group
> >>> athttp://groups.google.com/group/rubyonrails-talk?hl=en
> >>> .
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Ruby on Rails: Talk" group.
> > To post to this group, send email to rubyonrails-
> > [email protected].
> > To unsubscribe from this group, send email to
> > [email protected]
> > .
> > For more options, visit this group
> > athttp://groups.google.com/group/rubyonrails-talk?hl=en
> > .
>
>
--
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.