我在rails应用程序中使用paperclip,并在我的模型中进行以下三种验证
validates_attachment_presence :photo
validates_attachment_size :photo, :less_than=>1.megabyte
validates_attachment_content_type :photo, :content_type=>['image/jpeg', 'image/png', 'image/gif']
Run Code Online (Sandbox Code Playgroud)
如果用户忘记添加附件,则所有三个验证都会失败,因此会向用户显示以下三个错误:
# Photo file name must be set.
# Photo file size file size must be between 0 and 1048576 bytes.
# Photo content type is not included in the list
Run Code Online (Sandbox Code Playgroud)
我认为最好只显示此实例中的第一个错误,因为其他两个错误纯粹是后果...我希望用户只看到后两个错误,如果已添加附件但不符合验证标准.
我确定没有预先出现的验证可以做这种事情,并且通过阅读vendor/plugins/paperclip/lib/paperclip.rb中的代码,我看到validates_attachment_size方法支持:unless参数如下所示:
def validates_attachment_presence name, options = {}
message = options[:message] || "must be set."
validates_presence_of :"#{name}_file_name",
:message => message,
:if => options[:if],
:unless => options[:unless]
end
Run Code Online (Sandbox Code Playgroud)
所以,我在想我可以做以下事情:
validates_attachment_size :photo, :less_than=>1.megabyte, :unless=> :photo.blank
Run Code Online (Sandbox Code Playgroud)
但这打破了应用程序.有没有经验做过这种事情?对回形针源代码有很好的贡献.
编辑:
我试过用这个:
validates_attachment_size :photo, …Run Code Online (Sandbox Code Playgroud) 有没有人知道用Paperclip使用S3存储复制文件的方法?在我尝试自己编写之前,我只是想确保没有办法做到这一点.谢谢
我在我的mac os x计算机上安装了image magick,现在我想将它部署到heroku.我在heroku上安装了paperclip插件,但上传图片时出现此错误:
Paperclip::CommandNotFoundError
Run Code Online (Sandbox Code Playgroud)
之前我在计算机上没有imagemagick instaledl时出现此错误,但现在我想部署它,如何让图像magick在heroku上工作?
我很难弄清楚如何防止Paperclip删除旧版本的附件(图像).
我有一个模型,网站,有一个附件,标志.我想保留旧徽标,因为我将跟踪模型的更改并希望查看徽标的历史记录.
我正在跟踪另一个模型中的更改,该模型具有对文件路径的引用.我的问题是,在使用新徽标更新网站时,Paperclip会先刷新旧徽标.
令我惊讶的是,在创建新附件之前,没有可以切换到防止Paperclip冲洗旧附件的选项.
有任何想法吗?
添加文件后,我想自动开始上传过程.我在FilesAdded结束时调用了start函数,但它没有启动上传.
uploader.bind('FilesAdded', function(up, files) {
var str = "";
for (var i in files) {
str += '<div id="' + files[i].id + '">' + files[i].name + ' (' + plupload.formatSize(files[i].size) + ') <b></b></div>';
}
$('#filelist').html(str);
up.refresh();
up.start();
});
Run Code Online (Sandbox Code Playgroud)
这是我的创作代码
var uploader = new plupload.Uploader({
runtimes: 'html5,flash,silverlight',
autostart : true,
url: '<%= images_path %>',
max_file_size: '10mb',
multipart: true,
browse_button: "pickfiles",
container: "the-uploader",
drop_element : "drop-area",
multipart_params: {
'_http_accept': 'application/javascript',
'<%=request_forgery_protection_token%>': '<%=form_authenticity_token%>',
'<%=request.session_options[:key]%>': '<%=request.session_options[:id]%>'
},
filters: [
{title: "Images", extensions: "avi,jpg,jpeg,png,zip"}
], …Run Code Online (Sandbox Code Playgroud) 在我的模型中:
has_attached_file :uploaded_file,
:url => "/policy_documents/get/:id",
:path => "/public/policy_documents/:id/:basename.:extension"
validates_attachment_size :uploaded_file, :less_than => 10.megabytes
validates_attachment_presence :uploaded_file
validates_attachment_content_type :uploaded_file, :content_type =>['application/pdf', 'application/xlsx'],
:message => ', Only PDF, EXCEL, WORD or TEXT files are allowed. '
Run Code Online (Sandbox Code Playgroud)
在此之后,它只能上传PDF文档,而不是excel或文字或文本文档.请帮助我,我失踪了!
我在AWS EC2大型实例上有一个<20MB pdf文件的目录(每个pdf代表一个广告).我正在尝试使用ruby和DM-Paperclip将每个pdf文件上传到S3.
大多数文件上传成功,但有些文件似乎需要数小时才能将CPU挂起100%.我通过在相关部分中打印调试语句找到了导致问题的代码行.
# Takes an array of pdf file paths and uploads each to S3 using dm-paperclip
def save_pdfs(pdfs_files)
pdf_files.each do |path|
pdf = File.open(path)
ad = Ad.new
ad.pdf.assign(pdf) # <= Last debug statment is printed before this line
begin
ad.save
rescue => e
# log error
ensure
pdf.close
end
end
Run Code Online (Sandbox Code Playgroud)
为了帮助解决问题,我将过程固定在100%的过程中.结果是数十万行像这样:
...
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3543, ...}) = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3543, ...}) = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3543, ...}) = 0
... 500K lines
Run Code Online (Sandbox Code Playgroud)
接下来几千:
...
brk(0x1224d0000) = …Run Code Online (Sandbox Code Playgroud) 我自己做了一个简单的rails blogging-type应用程序,我使用Paperclip上传图像文件.我的一切工作正常,花花公子.我甚至把它连接到一个S3斗,等等.Smiffy对吗?
但是在编辑/更新帖子时我无法理解该怎么做.现在看来,我所拥有的就是我的表单模板上的这个字段:
= f.file_field :image
Run Code Online (Sandbox Code Playgroud)
因此,即使有先前附加的图像,也可以说"post/5/edit",该字段显示"No file selected".
更糟糕的是,如果我改变主意并且不想附加图像,则没有明显的方法来清除当前图像.
如何使这一点更加用户友好,并确保当前图像 - 文本/网址很好 - 显示为文本字段中的值和/或用户可以将当前图像更改为无.
我已经在我的图像表中添加了2000张图片,而我正在使用Paperclip插件创建拇指.我想知道是否有办法通过数据库并添加另一个:styles元素.
例如,当我添加图像时,我在模型中有以下内容:
has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" }
Run Code Online (Sandbox Code Playgroud)
但是,现在我想添加一个:large属性并将其应用于我表中已有的每个图像.就像是:
has_attached_file :image, :styles => { :large => "800x800>", :medium => "300x300>", :thumb => "100x100>" }
Run Code Online (Sandbox Code Playgroud)
这可能吗?或者我是否需要重新添加所有2000张照片?
我有两个这样的模特: -
模型1 - 卡 - 包含首页
附件感兴趣的数据的表示名称= cardimage
模型2 - 用户 - 包含用户
附件名称=头像
当我创造!一张新卡,我希望将用户模型中的头像作为新的cardimage复制到卡片模型中.
这有一个简单的衬垫吗?
的Ruby/Rails /回形针
paperclip ×10
amazon-s3 ×2
ruby ×2
copying ×1
cpu ×1
heroku ×1
imagemagick ×1
javascript ×1
model ×1
plupload ×1
upload ×1
validation ×1