gpt4 book ai didi

ruby-on-rails - 使用Rails 5.2 ActiveStorage创建和保存pdf,然后附加到电子邮件

转载 作者:行者123 更新时间:2023-12-03 12:48:27 31 4
gpt4 key购买 nike

恐怕新的主动存储功能出了点问题。
我想做的是创建一个pdf文件(我正在使用WickedPdf)并将其附加到模型上。
这是第一个问题,到目前为止,我发现的唯一机会是先写入文件,然后打开此文件以创建附件。

self.document.attach( {
filename: "filename.pdf",
io: File.open(pdf_document)
})


有没有一种方法可以从字符串创建附件?

之后,我尝试将此文件附加到邮件中。这失败了,因为它再次需要一个文件,而不是Blob。

attachments[document.filename.to_s] = document.blob


再次创建文件对我来说真的很奇怪。

请问有人可以启发我,而根本不写文件的正确方法是什么?对我来说,我似乎没有必要,效率低下且费时。

=====

解决方案第2部分:
所以我设法在不创建文件的情况下附加了文档

attachments[document.filename.to_s] = {:mime_type => 'application/pdf',
:content => document.attachment.blob.download }


第一部分仍然缺失。希望有人回答!

最佳答案

我相信,如果要生成类似PDF的内容,则在附加时将要使用io选项。这就是我现在在应用程序中执行操作的方式。

例如,here's what the documentation shows

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


如文档中所示,除非您有 ActionDispatch::Http::UploadedFile,否则将需要使用 io选项。

至于将文件附加到电子邮件,您可能有两种选择。如果您仍然可以访问 pdf_document,则可以执行此操作。我不确定到底是什么类型的对象。

attachments[document.filename.to_s] = pdf_document.read


更新资料

我以前使用过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")


顾名思义,StringIO的作用完全相同。它接受一个字符串并使它表现为IO。拥有IO后,就可以将其与ActiveStorage一起使用,就好像您已打开文件一样。

然后,正如您在更新的问题中提到的那样,您可以下载文件并将其附加到电子邮件中。

关于ruby-on-rails - 使用Rails 5.2 ActiveStorage创建和保存pdf,然后附加到电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48268731/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com