1

ファイルのアップロードに Carrierwave を使用しており、複数のファイルを送信できる次のフォームがあります。

<%= form_tag load_patterns_contacts_path, multipart: true, multiple: true do %>
  <%= file_field_tag 'qqfile[]', id: "upload_pattern", multiple: true %>
  <%= submit_tag "Load", id: "save_pattern", :class => 'btn btn-primary btn-success', multiple: true%>
<% end %>

送信されたファイルをサーバーにロードするコントローラーのコードは次のとおりです。

 @uploader = EmailPatternsUploader.new

  params[:qqfile].each do |p|
    tempfile = open(p.original_filename)
      puts tempfile
    @uploader.store!(tempfile)
  end

  redirect_to contacts_path
  flash[:success] = "Uploaded successfully."

ファイル名が「text.xlsx」、「image.jpg」などの場合は問題なく動作しますが、「_partial.html.erb」などの特殊記号が含まれている場合、Errno:ENOENT (そのようなファイルやディレクトリはありません - _partial.html.erb)

追加してみました

CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\_\-\+]/ 

私のcarrierwave.rbイニシャライザでは、結果が得られません。

助けてくれてありがとう!

アップデート:

問題は特別な記号「_」ではなく、実際にアップロードしようとしているサンプルに 2 つのドット (「.」) が含まれていることを理解しました。2つのドットを避けるために、正規表現を変更する必要があると思います

アップデート:

最後のコメントで申し訳ありません。問題は特別な記号ではなく、ファイルの名前でもないことを理解しました。{Rails.root} パスからしかファイルをアップロードできない問題。別のディレクトリを選択すると、前述のエラーが発生し、ファイルをアップロードできません。Carrierwave パス ディレクトリを設定するにはどうすればよいですか?

4

1 に答える 1

0

最後に、私の質問に対する答えを見つけてください。

エラーは次のコード文字列にありました。

params[:qqfile].each do |p|
  tempfile = open(p.original_filename)
    puts tempfile
  @uploader.store!(tempfile)
end

Carrierwave ストアでオブジェクトActionDispatch::Http::UploadedFileを渡す必要があることを理解しました! 方法。そのため、上記のコードは次のようになります。

params[:qqfile].each do |p|
  puts p.original_filename
    puts p
  @uploader.store!(p)
end

================================================== ================================

Carrierwaveを使用し、JQueryを使用せずに複数のファイルをアップロードするためのこのソリューションが役立つことを願っています。

1) Carrierwave を使用して、アップローダを作成します。

    rails g uploader EmailPatterns

2)コントローラーのカスタムアクションを作成し(Railscast#35Railscast#38を見て明確にしてください)、次のようなものを配置します(私の場合はload_patterns):

    def load_patterns
      @uploader = EmailPatternsUploader.new
        params[:qqfile].each {|p| @uploader.store!(p)}
      redirect_to contacts_path
      flash[:success] = "Uploaded successfully"
    end

動作させるには、アクションにカスタム ルート (config/routes.rb) を指定する必要があります。

  resources :contacts do
    collection { post :load_patterns}
  end

アップロードするファイルでパラメーターを取得するフォームを作成します (p.3 を参照)。

3) フォームを作成します。オプション multiple:true を指定して、ユーザーがロードする複数のファイルを選択できるようにする必要があります (複数のファイルをロードするため、[ ] を含むパラメーター名は必須要件です)。

    <%= form_tag load_patterns_contacts_path, multipart: true, multiple: true do %>
       <%= file_field_tag 'qqfile[]', id: "upload_pattern", multiple: true %>
       <%= submit_tag "Load",  id: "save_pattern", :class => 'btn btn-primary btn-success', multiple: true%>
    <% end %>

その後、カスタム アクションが機能します。

于 2013-11-13T05:54:15.193 に答える