我正在使用此file uploader example for Ruby on Rail。
现在,文件按ID保存到:public->system->uploads->uploads->000->000.
我需要将其保存到这样的文件夹系统中:public->system->Files->Types(JPG OR PDF)
文件必须不是根据ID而是根据类型保存。
示例:
所有jpg文件都应保存到:
public->system->Files->JPG
所有PDF文件都应保存到:
public->system->Files->PDF
我已经创建了文件夹,我只需要指定一个必须保存文件的路径。
这是来自uploads_controller.rb
def create
p_attr=params[:upload]
p_attr[:upload] = params[:upload][:upload].first if params[:upload][:upload].class == Array
@upload = Upload.new(p_attr)
respond_to do |format|
if @upload.save
format.html {
render :json => [@upload.to_jq_upload].to_json,
:content_type => 'text/html',
:layout => false
}
format.json { render json: [@upload.to_jq_upload].to_json, status: :created, location: @upload }
else
format.html { render action: "new" }
format.json{ render json: {name:(@upload.upload_file_name).split(".").first ,error: @upload.errors.messages[:upload_file_name]}, :status =>422}
end
end
end
提前致谢
答案 0 :(得分:0)
我建议切换到carrierwave uploader。有配置选项,可以帮助您按类型分隔文件。我的意思是,在这个配置中载波上传器:
def store_dir
"uploads/#{Rails.env}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
您可以使用方法更改'model.id'部分,按类型命名图像。
答案 1 :(得分:0)
您可以使用正则表达式手动执行此操作。所以它就像是:
type = p_attr.filename.match(/^*\w{3,}$/).to_s
filename是p_attr中调用的文件名。这样就可以得到以字符串结尾的文件类型。根据paperclip gem,您可以通过将它们设置为参数来设置不同的路径和URL:
path = "#{Rails.env}/public/system/FILE/#{type}"
@upload = Upload.new(p.attrs, path: path, url: path)
上传行不是100%肯定,但类似的东西应该能够覆盖回形针默认值。
有关详细信息,请查看有关存储的paperclip readme部分。它解释了重写默认路径。
答案 2 :(得分:0)