Zerony Zhao
2011-Jul-07 21:31 UTC
Question of uploading large file using carrierwave, uploadify and nginx upload module
Hey ROR users, I have a small experimental web app which is for uploading files. The web app uses carrierwave, uploadify. It works fine on small size files. However, it can not handle large size files (>1G) efficiently. Then I decided using nginx upload module, it worked well on small size files after modification of codes,. But It fails on uploading large files (>1G) because of http error 499 (client closed connection before nginx response). The problem here is that, when the uploadify script finishes sending file to nginx upload module, the uploadify javascript expects a quick response because the uploadify has finished uploading files and onAllComplete function will have to execute, however, the saving object takes much longer time and return late, and the javascript terminate prematurely, and issues a IO error. In fact, the file is successfully uploaded and placed in the correct place. attachments_controller def create @attachment = Attachment.new(:fast_asset => params[:fast_asset]) if @attachment.save # the line takes long time to finish render :nothing => true else render ''new'' end end attachment model class Attachment < ActiveRecord::Base attr_accessible :file, :fast_asset mount_uploader :file, FileUploader def fast_asset=(file) if file && file.respond_to?(''[]'') tmp_upload_dir = "#{file[''filepath'']}_1" tmp_file_path = "#{tmp_upload_dir}/#{file[''@original_name'']}" FileUtils.mkdir_p(tmp_upload_dir) FileUtils.mv(file[''filepath''], tmp_file_path) self.file = File.open(tmp_file_path) end end end the new uploading form uses the uploadify basic example javascript code. (http://www.uploadify.com/documentation/) _form.html.haml = javascript_include_tag ''swfobject.js'', ''jquery.uploadify.v2.1.4.min.js'' :javascript $(document).ready(function() { $(''#attachment_file'').click(function(event){ event.preventDefault(); }); $(''#attachment_file'').uploadify({ buttonText: ''Select files'', uploader: ''/uploadify/uploadify.swf'', cancelImg: ''/uploadify/cancel.png'', multi: true, auto: false, script: ''/files/fast_upload'', onComplete: function(event, queueID, fileObj, response, data) { var dat = eval(''('' + response + '')''); $.getScript(dat.upload);}, onAllComplete: function(event, data) { alert(data.filesUploaded + '' files uploaded successfully!\nThe average speed is '' + data.speed); window.location = ''#{root_path}''; }, }); $(''#attachment_submit'').click(function(event){ event.preventDefault(); $(''#attachment_file'').uploadifyUpload(); }); }); = form_for @attachment, :html => { :multipart => true } do |f| .field =f.label :file %br =f.file_field :file .action =f.submit "Upload" How should I fix the problem? Thanks in advance, --ZZ -- 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-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.