从carrierwave获取文件和文件名

时间:2018-02-13 04:23:46

标签: ruby-on-rails carrierwave

我已成功将文件上传到S3,现在我想将文件附加到电子邮件中,因此我可以使用Gmail API发送该文件。有些人建议直接调用方法let listOptions: CGWindowListOption = .optionAll ,例如here

如您所见,您可以调用方法

.file

<%= @page.form.file.filename %> 直接来自表单。

这是我的.file课程:

mount uploader

这是我的形式:

class Crm::LogEmailAttachment < Asset
    belongs_to :owner, class_name: 'Crm::LogEmail'
    mount_uploader :data, Crm::LogEmailAttachmentUploader
    mount_base64_uploader :data, Crm::LogEmailAttachmentUploader
    # default_scope -> {order("assets.order")}

    def to_s
      self.data.try(:file).try(:filename)
    end
end

然后我尝试通过从<div class="document-wrap"> <%= log_email.fields_for :crm_log_email_attachments do |a| %> <%= a. file_field :data, input_html: {class: "form-control" , wrapper: 'field'}, label: false %> <% end %> </div> 调用.file来获取文件,它会为params[:data]返回未定义的方法file,我的问题是如何才能获得该文件的路径来自#<ActionDispatch::Http::UploadedFile:0x007fc337322290>的文件和文件名?

1 个答案:

答案 0 :(得分:3)

您应该首先通过carrierwave将数据保存到S3,然后直接引用上传器对象,而不是引用params ActionDispatch :: Http :: UploadedFile对象。例如

object.data.file.filename

检索文件名,

object.data.url

检索关联资产的S3 URL。