我正在使用载波进行文件上传,并获得了以下表单,允许我提交几个文件:
<%= 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初始化器中,但是没有给出结果。
提前感谢您的帮助!
更新:
我已经理解,问题不是特殊的符号"_",而是事实上,我试图上传的样本包含两个点(".")。我想我需要修改正则表达式以避免两个点。
更新:
我对最后的评论感到抱歉。据我所知,这件事根本没有特殊的符号,也没有以文件的名义。我只能从{Rails.root}路径上传文件的问题。如果我选择另一个目录,我已经得到上述错误,无法上传一个文件。如何配置载波路径目录?
发布于 2013-11-13 05:54:15
我的问题终于找到答案了。
错误出现在以下代码字符串中:
params[:qqfile].each do |p|
tempfile = open(p.original_filename)
puts tempfile
@uploader.store!(tempfile)
end我已经理解了,我需要在载波存储中传递一个对象行动调度::Http::UploadedFile!方法。因此,上述代码应如下所示:
params[:qqfile].each do |p|
puts p.original_filename
puts p
@uploader.store!(p)
end==================================================================================
希望有人找到这个解决方案,为多个文件上传与载波,没有JQuery有用。
1)使用载波创建一个上传器。
rails g uploader EmailPatterns2)为您的控制器创建一个自定义操作(查看Railscast#35和Railscast#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/action es.rb):
resources :contacts do
collection { post :load_patterns}
end并创建一个表单,在那里您将获得与上传文件的配对(见第3页)
3)创建表单,其中需要指定选项multiple:true,以便允许用户选择要加载的多个文件(param name with是必要的,因为我们正在加载多个文件):
<%= 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 %>那么您的自定义操作将起作用。
https://stackoverflow.com/questions/19929906
复制相似问题