首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >轨道3-2。多文件上传。红宝石问题

轨道3-2。多文件上传。红宝石问题
EN

Stack Overflow用户
提问于 2013-11-12 13:00:32
回答 1查看 233关注 0票数 1

我正在使用载波进行文件上传,并获得了以下表单,允许我提交几个文件:

代码语言:javascript
复制
<%= 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 %>

下面是我的控制器中的代码,它将子文件加载到服务器:

代码语言:javascript
复制
 @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)。

我试着补充

代码语言:javascript
复制
CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\_\-\+]/ 

在我的carrierwave.rb初始化器中,但是没有给出结果。

提前感谢您的帮助!

更新:

我已经理解,问题不是特殊的符号"_",而是事实上,我试图上传的样本包含两个点(".")。我想我需要修改正则表达式以避免两个点。

更新:

我对最后的评论感到抱歉。据我所知,这件事根本没有特殊的符号,也没有以文件的名义。我只能从{Rails.root}路径上传文件的问题。如果我选择另一个目录,我已经得到上述错误,无法上传一个文件。如何配置载波路径目录?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-13 05:54:15

我的问题终于找到答案了。

错误出现在以下代码字符串中:

代码语言:javascript
复制
params[:qqfile].each do |p|
  tempfile = open(p.original_filename)
    puts tempfile
  @uploader.store!(tempfile)
end

我已经理解了,我需要在载波存储中传递一个对象行动调度::Http::UploadedFile!方法。因此,上述代码应如下所示:

代码语言:javascript
复制
params[:qqfile].each do |p|
  puts p.original_filename
    puts p
  @uploader.store!(p)
end

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

希望有人找到这个解决方案,为多个文件上传与载波,没有JQuery有用。

1)使用载波创建一个上传器。

代码语言:javascript
复制
    rails g uploader EmailPatterns

2)为您的控制器创建一个自定义操作(查看Railscast#35Railscast#38以表明清楚),并将其放在类似的地方(在我的例子中是load_patterns):

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

要使其工作,您需要为您的操作指定自定义路由(config/action es.rb):

代码语言:javascript
复制
  resources :contacts do
    collection { post :load_patterns}
  end

并创建一个表单,在那里您将获得与上传文件的配对(见第3页)

3)创建表单,其中需要指定选项multiple:true,以便允许用户选择要加载的多个文件(param name with是必要的,因为我们正在加载多个文件):

代码语言:javascript
复制
    <%= 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 %>

那么您的自定义操作将起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19929906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档