0

我正在为 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

提前致谢

4

3 回答 3

0

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

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

文件名是它在 p_attr 中调用的任何内容。因此,这将为您提供以字符串结尾的文件类型。根据回形针 gem,您可以通过将它们设置为参数来设置不同的路径和 url:

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

在上传线上不是 100% 确定,但类似的东西应该能够覆盖回形针默认值。

有关更多信息,请查看关于存储的回形针自述文件部分。它解释了覆盖默认路径。

于 2012-11-17T21:35:22.093 回答
0

更改回形针文件存储位置

于 2012-11-17T22:22:15.933 回答
0

我建议切换到carrierwave uploader。有一些配置选项,它们将帮助您按类型分隔文件。我的意思是,在载波上传器的这种配置中:

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

您可以使用方法更改“model.id”部分,按类型命名图像。

于 2012-11-17T21:10:53.367 回答