Ruby On Rails:将文件上传到特定文件夹

时间:2012-11-17 21:07:23

标签: ruby-on-rails file-upload

我正在使用此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

提前致谢

3 个答案:

答案 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)