【问题标题】:Multiple file upload with ruby & sinatra使用 ruby​​ 和 sinatra 上传多个文件
【发布时间】:2017-04-11 17:46:57
【问题描述】:

我正在使用以下代码通过表单上传单个文件:

app.rb

@filename = params[:file][:filename]
file = params[:file][:tempfile]

File.open("./public/#{@filename}", 'wb') do |f|
 f.write(file.read)
end

string_file.erb:

<input type='file' class='form-control' id='<%= array['id'] %>'name='file[]' value='<%= default_value %>' <%= constraints %> style="display: none;" multiple>

如何循环将多个文件写入文件系统?

【问题讨论】:

  • 我会考虑上传的大小、服务器限制和应用程序的响应能力...例如,多个小上传可能使用XMLHttpRequest 并且它是progress 事件来指示上传状态,而您可能会考虑使用 Web 套接字解决方案来处理非常大的上传,允许在连接中断后恢复上传(无需重新启动上传)。此外,您的服务器的内存和 CPU 数量有限......当上传大文件时,一些 Ruby 服务器可能会导致 DoS 或资源匮乏,而其他服务器(即iodine)提供抢先上传大小限制。
  • @Myst 感谢您的建议,我正在客户端和服务器端添加代码以将文件限制为 10 MB 或更少,上传的文件也需要通过电子邮件发送。
  • 当然,不客气。祝你好运:-) ...作为最后一点,我认为当 HTTP 解析器完成并且 Rack 已经保存了请求数据时,检查上传文件限制的问题可能有点太晚了。在服务器端,我会考虑使用代理层(即nginx/apache 设置)来实现限制,或者在支持的情况下使用服务器设置 - see here
  • @Myst 感谢您的所有建议!我正在努力实施尽可能多的客户端限制,以防止用户上传超过 10MB 的文件以及限制文件类型。无论文件如何,只要通过电子邮件发送,我也会从服务器中删除该文件。我正在使用 nginx,并且在我的 conf 文件中设置了 client_max_body_size。

标签: ruby sinatra


【解决方案1】:

这是我的解决方案

puts params['images'].map{ |f| f[:filename] }.join(";")
k = params['images'].map{ |f| f[:filename] }.join(";")
$param = k.chomp.split(";")
array_length = $param.length       # or $param.size
array_lengthx = array_length - 1
puts "length of $param is : #{array_length}"

i = 0
i = i - 1
puts array_lengthx
puts i
while i.to_i < array_lengthx do
  i =i+1
  puts i
  @filename = params[:images][i][:filename]
  file = params[:images][i][:tempfile]
  path = "/home/user/Descargas/sinatra_ajax-master/#{@filename}"
  File.open("/home/user/Descargas/sinatra_ajax-master/#{@filename}", 'wb') do |f|
    f.write file.read
  end
end

这是html代码:

<form action="/upload2" method="post" enctype="multipart/form-data">
  <input type="file" name="images[]" multiple />
  <input type="submit" />
</form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    相关资源
    最近更新 更多