如何在没有文件的情况下使用Paperclip,只需要一个字符串?

Jan*_*Jan 15 ruby-on-rails amazon-s3 paperclip

我有一个rake文件,它通过HTTP读取内容,我想使用Paperclip将加载的内容存储在Amazon S3上.当我提供本地文件时,它工作正常,但我想将内容设置为字符串并手动设置内容类型.

以下不起作用.未发出错误,数据库条目已更新,但在S3中未创建任何文件:

p.attachment = "Test"
p.attachment_file_name = "test.txt"
p.attachment_content_type = "text/plain"
p.attachment_file_size = "Test".size
p.attachment_updated_at = Time.now
p.save
Run Code Online (Sandbox Code Playgroud)

我想我可以用我的内容写一个临时文件,但这将是一个非常低效的解决方案.

Leo*_*opd 44

为避免使用临时文件乱丢文件系统,您可以使用StringIO如下:

p.attachment = StringIO.new(your_string)
Run Code Online (Sandbox Code Playgroud)

  • 很棒的小解决方法.完成此操作后,使用`p.attachment_file_name ='test.txt'`设置附件文件名,然后就可以了. (3认同)

Aar*_*oir 8

这有点晚了但我通过使用ruby 1.9.2 rails 3.1创建一个Tempfile来实现它

file = Tempfile.new( ["file_name", '.txt'] )
file.write( "my test string".force_encoding('utf-8') )
p.attachment = file
Run Code Online (Sandbox Code Playgroud)


Nic*_*nco 2

不,您必须使用字符串创建一个文件。

只需查看 Paperclip 源代码: https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/attachment.rb#L77https://github.com/thoughtbot/paperclip/blob/master/ lib/paperclip/iostream.rb#L5

当您使用 my_model.attachment= 分配某些内容时,Paperclip 需要一个文件对象。