使用回形针上传静态 zip 文件失败,并出现 Paperclip::AdapterRegistry::NoHandlerError for filename.zip

Posted

技术标签:

【中文标题】使用回形针上传静态 zip 文件失败,并出现 Paperclip::AdapterRegistry::NoHandlerError for filename.zip【英文标题】:Uploading static zipfile using paperclip fails with Paperclip::AdapterRegistry::NoHandlerError for filename.zip 【发布时间】:2014-03-18 16:36:35 【问题描述】:

我正在临时文件夹中创建 zipfile,但我无法将静态 zipfile 上传到 s3。它因错误 Paperclip::AdapterRegistry::NoHandlerError for myfilename.zip 而失败。这是我的代码

控制器

def create_zipfile
     file = File.join(Rails.root, "public/temp_download/invoices_#timer.zip")
     Zip::Archive.open(file, Zip::CREATE) do |ar|
     Dir.glob("#Rails.root/public/temp_download/invoices_#timer/*").each do |path|
     ar.add_file(path.split('/').last, path) # add_file(<entry name>, <source path>)
     end
  end
  upload(pfile)
end

def upload(filename)
     invoice_upload = InvoiceUpload.new
     invoice_upload.invoice =  filename
     invoice_upload.save
end

型号

class InvoiceUpload < ActiveRecord::Base
                      has_attached_file :invoice,
                      :storage => :s3,
                      :url     => 's3_domain_url',
                      :s3_host_alias  => '***'
                      :s3_credentials => File.join(Rails.root, 'config', 's3.yml'), 
                      :path => "/invoices/:style/:id_:filename"
end

【问题讨论】:

请分享InvoiceUpload类。 刚刚用 InvoiceUpload 类编辑了我的帖子,谢谢。 【参考方案1】:

修改上传方式如下:

def upload(filename)
     invoice_upload = InvoiceUpload.new
     invoice_upload.invoice =  Rack::Test::UploadedFile.new(filename)
     invoice_upload.save
end

另外,upload(pfile)create_zipfile 中应该是upload(file),因为您的代码中没有名为pfile 的变量。

【讨论】:

以上是关于使用回形针上传静态 zip 文件失败,并出现 Paperclip::AdapterRegistry::NoHandlerError for filename.zip的主要内容,如果未能解决你的问题,请参考以下文章

带有回形针 Docx content_type 的 Rails 以 application/zip 的形式返回

使用 ruby​​zip 在嵌套模型中下载回形针附件

通过 RestKit 或任何 HTTP 请求上传回形针照片

使用 Ionic 创建大型多部分 zip 失败并出现 OutOfMemoryException

Rails API 回形针。上传图像将其转换为 base 64 并保存并检索它

尝试在 Rails 中发布文件时出现 405 错误