我在服务器上有字节流,我想用Paperclip附加到模型类,我希望能够指定它们在文件系统中保存的名称.因为我有很多这些传入的文件,我宁愿能够创建它们,Tempfiles以便我不必担心名称冲突并手动删除它们等.这就是我正在做的事情:
desired_file_name = 'foo.txt'
Tempfile.open([File.basename(desired_file_name), File.extname(desired_file_name)]) do |tf|
tf.write(content_stream)
tf.rewind
model_obj.paperclip_attachment = tf
end
Run Code Online (Sandbox Code Playgroud)
这非常有效.唯一的问题是,我的Paperclip附件最终得到一个临时文件名,如foo.txt.201029392u-gyh-foh96y.txt.那么如何告诉Paperclip将文件保存为什么?通话model_obj.paperclip_attachment_file_name = desired_file_name无效.DB字段被保存为该名称,但在文件系统上我仍然具有该临时文件名.
我正在尝试锐化通过回形针上传的图像.锐化代码正在工作,但它导致样式不起作用.代码是这样的:
has_attached_file :photo,
:styles => {
:thumb => {:geometry => "100x100>"},
:medium => {:geometry => "300x300>"},
:original => {:geometry => "1024x1024>"}
},
:processors => [:sharpen],
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3.yml",
:path => "/:style/:id/:filename"
Run Code Online (Sandbox Code Playgroud)
现在,如果我删除处理器选项,则按指定调整上传的图像大小.但是,如果我包含处理器选项,则所有生成的图像都是原始大小.
我的锐化处理器看起来像这样:
module Paperclip
class Sharpen < Paperclip::Processor
def initialize file, options = {}, attachment = nil
super
@file = file
@current_format = File.extname(@file.path)
@basename = File.basename(@file.path, @current_format)
end
def make
dst = Tempfile.new(@basename)
dst.binmode
command = "#{File.expand_path(@file.path)} -unsharp 1.5×1.0+1.5+0.02 #{File.expand_path(dst.path)}"
begin
success = Paperclip.run("convert", command) …Run Code Online (Sandbox Code Playgroud) 我正在使用paperclip和我的rails 3应用程序.我想附加一个随机字符串,没有什么可以在文件的末尾长或疯狂缓存CDN.有人知道一个真正简单的方法吗?
这是我目前的情况:
has_attached_file :photo,
:styles => { :thumb => "70x70>" },
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3.yml",
:path => "/:rails_env/public/users/:id/:style/:basename.:extension",
.....
Run Code Online (Sandbox Code Playgroud)
我想要一个像FILENAME_31313.png这样的文件名
每次保存照片时31313是随机的.
谢谢
我有一组传递的Rspec用户模型测试,直到我有了paperclip属性"profile picture".
回形针一切都很好,效果很好,但我希望我的测试也能更新通过.我刚刚将此行添加到user_spec文件的@attr:
:avatar => File.new (Rails.root + "public/images/Default_profile_picture.jpg")
Run Code Online (Sandbox Code Playgroud)
在before_each循环中,为用户模型创建一组标准的工作属性.
当我运行测试时,所有测试都会给出错误消息:
User model missing required attr_accessor for 'avatar_file_name' ...
Run Code Online (Sandbox Code Playgroud)
将paperclip的字段作为attr_accessor放在模型中会使问题在测试中消失,但我认为我不应该在我的模型中执行此操作(如果我这样做,则无法正常工作).
有没有人知道为什么我在测试时收到这些错误消息?...(我在spec/helper中包含了配置行Shoulda :: Matchers和需要的回形针)
感谢您发布的任何答案!
我的兄弟告诉我,我需要在我的应用程序上安装Amazon S3才能使用Paperclip.但是,我只是将我的应用程序推送到Heroku生产服务器,我可以上传图像没问题.我没有安装S3.
我需要将数据库表中的所有产品生成到XML文件中.因为我的应用程序在Heroku上运行,所以我需要使用Amazon S3作为存储.
以下是有关如何保存图像的示例:
has_attached_file :photo,
:styles => {
:thumb=> "100x100#",
:small => "400x400>" },
:storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:path => "/:style/:id/:filename"
Run Code Online (Sandbox Code Playgroud)
这让我有点困惑......因为我不确定这项任务的逻辑.我的想法是create_xml_feed在Products控制器中运行一个动作(比方说)
xml = Builder::XmlMarkup.new( :indent => 2 )
xml.instruct! :xml, :encoding => "ASCII"
xml.product do |p|
p.name "Test"
end
Run Code Online (Sandbox Code Playgroud)
但问题来了 - 我不知道,如何将新创建的文件保存到Amazon S3 Bucket中.
我很感激每一笔进步,谢谢
Lemmie只是说这是我对Rails相当新的一点.
我们的应用程序使用paperclip(3.2.4)来管理附件,像往常一样,我生成了一个类似于以下内容的迁移:
class AddAttachmentPhotoToPhpfoxUsers < ActiveRecord::Migration
def self.up
change_table :phpfox_user do |t|
t.attachment :photo
end
end
def self.down
drop_attached_file :phpfox_user, :photo
end
end
Run Code Online (Sandbox Code Playgroud)
(它被称为phpfox_user,因为我们必须在遗留数据库的基础上构建)
这一切都很棒,工作正常.但是,我们还必须管理2个数据库并迁移到它们,因此我根据此帖子上的建议重新安排了迁移:
http://excid3.com/blog/rails-activerecord-multiple-databases-and-migrations
我不知道这应该有多好,但它似乎是一个相当简洁的解决方案,它很好地组织了迁移.
但是现在回形针迁移不起作用,因为找不到附件类型.我假设它不再在范围内或者没有绑定到表对象.有没有人知道我应该做些什么才能把它带进来,我已经尝试过将'paperclip'添加到模块中,但这没有用.
我也试过使用add_attachment助手,但也没找到.
我们使用的是Rails 3.2.13和Ruby 2.0.0.
编辑:错字
我写了以下内容:
<% if @document != nil %>
<%= form_for(@document, :html => { :multipart => true }) do |f| %>
<% if @document.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@document.errors.count, "error") %> prohibited this document from being saved:</h2>
<ul>
<% @document.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<% if notice %>
<p id="notice"><%= notice %></p>
<% end %>
<%= render partial: 'documents/resume' %>
<div id="add_buttons">
<%= f.file_field :resume %>
<%= f.submit %>
</div>
<% end …Run Code Online (Sandbox Code Playgroud) 我有验证设置只允许png和jpg,但我也想允许PDF.我似乎无法弄清楚如何将该语法添加到现有代码中.
has_attached_file :receipt
# Validate content type
validates_attachment_content_type :receipt, :content_type => /\Aimage/
# Validate filename
validates_attachment_file_name :receipt, :matches => [/png\Z/, /jpe?g\Z/]
Run Code Online (Sandbox Code Playgroud)
谢谢!
在Google Cloud上部署应用程序时出现问题
所含内容与所报告的内容不符
在本地工作正常!我已经尝试使用command_path。所以我真的不知道下一步该怎么做...
这是我的模特
has_mongoid_attached_file :image,
:styles => { :large => "380x380!" , :medium => "240x240", :small => "120x120!" },
:storage => :fog,
:fog_public => true,
:fog_directory => 'XXXX',
:path => "images/:id/:style/:basename.:extension",
:fog_credentials => { :provider => 'Google',
:google_storage_access_key_id => 'XXXXX',
:google_storage_secret_access_key => 'XXXXX'}
validates_attachment_content_type :image, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]
Run Code Online (Sandbox Code Playgroud)
感谢你付出的努力。我希望你们能帮助我
ruby google-app-engine ruby-on-rails paperclip paperclip-validation