使用带有Paperclip的rails,我可以使用以下命令在before_create期间获取文件名:
extension = File.extname(photo_file_name).downcase
我如何得到JUST文件名..现在我有photo_file_name提供整个文件,titlename.pdf
我需要没有.pdf的titlename
谢谢
使用代码更新:
photo.rb:
before_create :obfuscate_file_name
#Paperclip for photo
has_attached_file :photo,
......
private
def obfuscate_file_name
extension = File.extname(photo_file_name).downcase
fileNameOnly = File.basename(photo_file_name).downcase
self.photo.instance_write(:file_name, "#{fileNameOnly}_#{ActiveSupport::SecureRandom.hex(32)}#{extension}")
end
Run Code Online (Sandbox Code Playgroud) 人们如何编写涉及Paperclip的Rails迁移?我觉得我可能会遗漏一些明显的东西,因为我现在已经编写了自己的迁移助手黑客,这使得它变得更容易并且还可以处理必要的文件系统更改.当然,您应该在部署到生产之前在开发(和临时)环境中测试运行这些类型的迁移.
Paperclip迁移重命名,添加和删除帮助器
Paperclip更改路径迁移帮助程序(不是真正的数据库迁移,但认为它非常适合)
有没有更好的解决方案或最佳实践?有些人似乎创造了耙子任务等,感觉非常麻烦.
我创建了一个在Heroku上运行的Rails应用程序,包括Paperclip和S3.我已经设法通过网站将图像上传到我的S3存储桶(我可以看到它们显示在亚马逊控制面板上的存储桶中).
但是当我添加一个Image标签即<%= image_tag x.photo.url%>时,我得到以下html(这里省略了标签),没有显示图像!
img alt ="Test_tree"src ="http://s3.amazonaws.com/hiphotos/ads/photos/000/000/015/original/test_tree.jpg?1344661020"
请帮忙!为什么我不能看到图像,即使它们在桶中?
非常感谢你们
我们说我的seeds.rb文件中有以下条目:
Image.create(:id => 52, :asset_file_name => "somefile.jpg", :asset_file_size => 101668, :asset_content_type => "image/jpeg", :product_id => 52)
Run Code Online (Sandbox Code Playgroud)
如果我播种它,它会尝试处理指定的图像,我收到此错误:
No such file or directory - {file path} etc...
Run Code Online (Sandbox Code Playgroud)
我的图像备份,所以我真的不需要创建它们; 但我需要记录.我不能在我的模型中评论paperclip指令; 然后它起作用; 但我想可能还有另一种解决方案.
是否还有其他模式可以实现它?或者告诉回形针不要处理图像?
Paperclip是Rails的一个很棒的上传插件.将上传存储在本地文件系统或Amazon S3上似乎运行良好.我只假设本地主机上存储文件,但此应用程序需要使用S3,因为它将托管在Heroku上.
如何通过单个压缩下载从S3获取所有上传/附件?
从本地文件系统获取zip 文件似乎很简单.它让S3中的文件让我感到困惑.我认为这可能与rubyzip处理URL引用的文件的方式有关.我尝试了各种方法,但似乎无法避免错误.
format.zip {
registrations_with_attachments = Registration.find_by_sql('SELECT * FROM registrations WHERE abstract_file_name NOT LIKE ""')
headers['Cache-Control'] = 'no-cache'
tmp_filename = "#{RAILS_ROOT}/tmp/tmp_zip_" <<
Time.now.to_f.to_s <<
".zip"
# rubyzip gem version 0.9.1
# rdoc http://rubyzip.sourceforge.net/
Zip::ZipFile.open(tmp_filename, Zip::ZipFile::CREATE) do |zip|
#get all of the attachments
# attempt to get files stored on S3
# FAIL
registrations_with_attachments.each { |e| zip.add("abstracts/#{e.abstract.original_filename}", e.abstract.url(:original, false)) }
# => No such file or directory - http://s3.amazonaws.com/bucket/original/abstract.txt
# Should note that these files …Run Code Online (Sandbox Code Playgroud) 我有一个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)
我想我可以用我的内容写一个临时文件,但这将是一个非常低效的解决方案.
使用Amazon S3时如何使用回形针创建路径?
我的目录上的目录是:
/image/:id/:filename
Run Code Online (Sandbox Code Playgroud)
我的模特:
has_attached_file :image,
:storage => :s3,
:bucket => 'mybucket',
:s3_credentials => {
:access_key_id => ENV['S3_KEY'],
:secret_access_key => ENV['S3_SECRET']
}
Run Code Online (Sandbox Code Playgroud) 我在保存之前使用此方法重命名图像:
def rename_avatar
self.avatar.instance_write :file_name, Time.now.to_i.to_s
end
before_post_process :rename_avatar
Run Code Online (Sandbox Code Playgroud)
图像被当前时间重命名,但没有添加文件类型,而是1334487964.jpg仅保存1334487964.
那里我想念的是什么?我想:file_name只包含文件名 - 没有文件类型
有没有办法阻止验证消息出现两次Paperclip上传验证?
这是我的模型:
has_attached_file :photo, :styles => { :thumb => "215x165" }, :default_url => "/images/:style/missing.png"
validates_attachment :photo, :presence => true,
:content_type => { :content_type => "image/jpg" },
:size => { :in => 0..0.5.megabytes }
Run Code Online (Sandbox Code Playgroud)
这是我的观点:
<% if @product.errors.any? %>
<p>The following errors were found:</p>
<ul>
<% @product.errors.full_messages.each do |message| %>
<li>- <%= message %></li>
<% end %>
</ul>
<% end %>
Run Code Online (Sandbox Code Playgroud)
如果我上传无效文件,我会收到以下错误消息:
有没有办法让其中一个出现?我尝试过向模型添加消息:但那么这也只是出现了两次!
谢谢!
作为参考,我一直在关注本教程:https://devcenter.heroku.com/articles/paperclip-s3除了我现在在localhost测试中,所以我安装了Figaro gem并将我的S3信息放在application.yml中.
使用Rails v4,Cocaine v0.5.3和Paperclip v4.1.0(不确定是否需要提及任何其他gem版本号).
我有一个名为SubmissionDetails的模型,其new.html.erb中我试图将jpg上传到名为attachment的列.以下是相关的型号代码:
has_attached_file :attachment, styles: {
thumb: '200x200>',
large: '800x800>'
}
validates_attachment_content_type :attachment, content_type: /\Aimage\/.*\Z/
Run Code Online (Sandbox Code Playgroud)
当我尝试上传jpg时,它返回到表单,并显示以下错误消息:
1 error prohibited this submission_detail from being saved:
Attachment translation missing:
en.activerecord.errors.models.submission_detail.attributes.attachment.spoofed_media_type
Run Code Online (Sandbox Code Playgroud)
我理解了一些错误,我的en.yml文件中缺少显示此错误消息的文本,但那个欺骗媒体类型部分呢?
这显示在我的服务器控制台中,不确定这是否相关:
[paperclip] Content Type Spoof: Filename header.jpg (["image/jpeg"]), content type discovered from file command: . See documentation to allow this combination.
(0.0ms) rollback transaction
Run Code Online (Sandbox Code Playgroud)