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

搬送波アップローダーに切り替えることをお勧めします。タイプごとにファイルを区切るのに役立つ構成オプションがあります。つまり、この構成のcarrierwaveアップローダーでは:

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

'model.id'部分をメソッドで変更し、タイプで画像に名前を付けることができます。

于 2012-11-17T21:10:53.367 に答える
0

ペーパークリップ ファイルの保存場所を変更する

于 2012-11-17T22:22:15.933 に答える
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% 確実ではありませんが、そのようなものでペーパークリップのデフォルトを上書きできるはずです。

詳細については、ストレージに関するペーパークリップの readmeセクションを確認してください。デフォルトパスのオーバーライドについて説明します。

于 2012-11-17T21:35:22.093 に答える