2012-11-17 120 views
0

我正在使用此file uploader example for Ruby on RailRuby On Rails:将文件上传到特定文件夹

现在的文件是由它们的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

我建议切换到carrierwave uploader代码。有配置选项,这将帮助您按类型分隔文件。我的意思是,在carrierwave上传该配置:

def store_dir 
    "uploads/#{Rails.env}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"  
end 

你可以用一个方法改变“model.id”部分,按类型命名的图像。

+0

我不想切换。如果有可能用回形针做到这一点,我想知道它。 – Tonja

+0

不幸的是,我没有回形针的经验。 –

0

您可以使用正则表达式手动执行此操作。所以它会是这样的:

type = p_attr.filename.match(/^*\w{3,}$/).to_s 

文件名是无论其在p_attr内调用。所以这会让你的文件类型以字符串结尾。据回形针宝石,你可以将其设定为一个参数组不同的路径和URL:

path = "#{Rails.env}/public/system/FILE/#{type}" 
@upload = Upload.new(p.attrs, path: path, url: path) 

没有100%确定上传线,但这样的事情应该能够覆盖回形针默认。

欲了解更多信息,请查阅paperclip readme关于存储的部分。它解释了覆盖默认路径。

相关问题