Mar*_*eas 19 ruby-on-rails ruby-on-rails-5 rails-activestorage ruby-on-rails-5.2
我担心新的主动存储功能会出现问题.我想要做的是创建一个pdf(我正在使用WickedPdf)并将其附加到模型.这是第一个问题,我到目前为止唯一的想法是首先写入文件,然后打开此文件以创建附件.
self.document.attach( {
filename: "filename.pdf",
io: File.open(pdf_document)
})
Run Code Online (Sandbox Code Playgroud)
有没有办法从字符串创建附件?
之后我尝试将此文件附加到邮件中.这会失败,因为它需要一个文件,而不是一个blob.
attachments[document.filename.to_s] = document.blob
Run Code Online (Sandbox Code Playgroud)
再次创建一个文件对我来说似乎很奇怪.
可以请有人告诉我,如果没有编写文件,那么实现这一目标的正确方法是什么?对我来说,这似乎是不必要的,无用的和耗时的.
=====
解决方案第2部分:所以我设法在不创建文件的情况下附加文档
attachments[document.filename.to_s] = {:mime_type => 'application/pdf',
:content => document.attachment.blob.download }
Run Code Online (Sandbox Code Playgroud)
第一部分仍然缺失.希望有人有答案!
Der*_*per 21
我相信如果您生成类似PDF的内容,则需要io在附加时使用该选项.这就是我现在在应用程序中做事的方式.
例如,以下是文档显示的内容:
person.avatar.attach(params[:avatar]) # ActionDispatch::Http::UploadedFile object
person.avatar.attach(params[:signed_blob_id]) # Signed reference to blob from direct upload
person.avatar.attach(io: File.open("/path/to/face.jpg"), filename: "face.jpg", content_type: "image/jpg")
person.avatar.attach(avatar_blob) # ActiveStorage::Blob object
Run Code Online (Sandbox Code Playgroud)
正如文档中所示,除非您有,否则ActionDispatch::Http::UploadedFile您将要使用该io选项.
至于将文件附加到电子邮件,您可能有几个选项.如果您仍然可以访问,则pdf_document可以执行此操作.我不确定它究竟是什么类型的物体.
attachments[document.filename.to_s] = pdf_document.read
Run Code Online (Sandbox Code Playgroud)
我之前使用过wicked_pdf,但暂时没用过.看起来大多数生成方法都返回一个字符串,除非您请求文件.您可能已经知道这一点 - 只是给出答案的一些背景知识.
由于wicked_pdf可以返回一个字符串,我认为你可以使用它StringIO来附加文件.例如:
pdf = WickedPdf.new.pdf_from_string("<h1>Hey</h1>")
self.document.attach(io: StringIO.new(pdf), filename: "file.pdf", content_type: "application/pdf")
Run Code Online (Sandbox Code Playgroud)
StringIO完全按照名称暗示.它需要一个字符串,使其表现为IO.拥有IO后,您可以将它与ActiveStorage一起使用,就好像您有一个打开的文件一样.
然后,正如您在更新的问题中所提到的,您可以下载该文件并将其附加到电子邮件中.
| 归档时间: |
|
| 查看次数: |
3899 次 |
| 最近记录: |