StringIO 的回形针验证无效
Paperclip validation of StringIO not valid
我想使用 Paperclip gem (4.3.6) 从第三方流式传输文件 API 并将 HTTP 响应的主体用作 ActiveRecord 模型的附件代表传真。
class Fax
has_attached_file :fax_document
validates_attachment_content_type :fax_document, content_type: { content_type: ["application/pdf", "application/octet-stream"] }
end
我正在使用下面的代码从 API 服务器获取 HTTP 响应并将其保存为传真模型上的附件。 (为简洁起见,下面的代码略有修改)。
#get the HTTP response body
response = download(url)
#add the necessary attributes to the StringIO class. This technique is demonstrated in multiple SO posts.
file = StringIO.new(response)
file.class.class_eval { attr_accessor :original_filename, :content_type }
file.original_filename = "fax.pdf"
file.content_type = 'application/pdf'
#save the attachment
fax = Fax.new
fax.fax_document = file
fax.save
response
变量包含类似于 pdf 二进制对象的字符串表示,fax.save
引发 content_type 无效错误。如果我使用 do_not_validate_attachment_file_type :fax_document
明确放宽传真模型上的回形针验证,则附件将正确保存。
我怀疑 Paperclip 内容类型验证失败,因为它无法判断返回的内容实际上是 'application/pdf'。
为什么 Paperclip 会引发 content_type 无效错误?我如何告诉 Paperclip 响应正文是 pdf 格式?
我认为您的 validates_attachment_content_type
定义是错误的。您不应将散列传递给 :content_type
选项,而应传递 single content type or an array of types.
对于您的情况,应执行以下操作:
validates_attachment_content_type :fax_document,
content_type: ["application/pdf", "application/octet-stream"]
我想使用 Paperclip gem (4.3.6) 从第三方流式传输文件 API 并将 HTTP 响应的主体用作 ActiveRecord 模型的附件代表传真。
class Fax
has_attached_file :fax_document
validates_attachment_content_type :fax_document, content_type: { content_type: ["application/pdf", "application/octet-stream"] }
end
我正在使用下面的代码从 API 服务器获取 HTTP 响应并将其保存为传真模型上的附件。 (为简洁起见,下面的代码略有修改)。
#get the HTTP response body
response = download(url)
#add the necessary attributes to the StringIO class. This technique is demonstrated in multiple SO posts.
file = StringIO.new(response)
file.class.class_eval { attr_accessor :original_filename, :content_type }
file.original_filename = "fax.pdf"
file.content_type = 'application/pdf'
#save the attachment
fax = Fax.new
fax.fax_document = file
fax.save
response
变量包含类似于 pdf 二进制对象的字符串表示,fax.save
引发 content_type 无效错误。如果我使用 do_not_validate_attachment_file_type :fax_document
明确放宽传真模型上的回形针验证,则附件将正确保存。
我怀疑 Paperclip 内容类型验证失败,因为它无法判断返回的内容实际上是 'application/pdf'。
为什么 Paperclip 会引发 content_type 无效错误?我如何告诉 Paperclip 响应正文是 pdf 格式?
我认为您的 validates_attachment_content_type
定义是错误的。您不应将散列传递给 :content_type
选项,而应传递 single content type or an array of types.
对于您的情况,应执行以下操作:
validates_attachment_content_type :fax_document,
content_type: ["application/pdf", "application/octet-stream"]