... respond_to do |format| format.pdf do pdf = GenerateReportPdf.new(@object,view_context) send_data pdf.render,filename: "Report",type: "application/pdf",disposition: "inline" end end
这工作正常,但我现在想将GenerateReportPdf移动到后台任务中,并将生成的对象传递给Carrierwave以直接上传到S3.
工人看起来像这样
def perform pdf = GenerateReportPdf.new(@object) fileString = ??????? document = Document.new( object_id: @object.id,file: fileString ) # file is field used by Carrierwave end
如何处理由Prawn(???)返回的对象,以确保它是由Carrierwave读取的格式.
fileString = pdf.render_file’filename’将对象写入应用程序的根目录.因为我在Heroku这是不可能的.
file = pdf.render返回ArgumentError:string包含空字节
fileString = StringIO.new(pdf.render_file’filename’)返回TypeError:否将nil隐式转换为String
fileString = StringIO.new(pdf.render)返回ActiveRecord :: RecordInvalid:验证失败:文件您不能上传无文件,允许的类型:jpg,jpeg,gif,png,pdf,doc,docx,xls,xlsx
fileString = File.open(pdf.render)返回ArgumentError:string包含空字节
….等等.
我失踪了什么StringIO.new(pdf.render)似乎应该可以工作,但我不清楚为什么它会产生这个错误.
解决方法
我遇到的问题是文件名设置不正确,尽管在Carrierwave的wiki上遵循以下建议,代码中的其他地方的错误意味着文件名作为空字符串返回.我忽略了这个假设,需要别的东西
https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Upload-from-a-string-in-Rails-3
我的代码最终看起来像这样
def perform s = StringIO.new(pdf.render) def s.original_filename; "my file name"; end document = Document.new( object_id: @object.id ) document.file = s document.save! end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。