Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-纸夹-支持多文件上传_Ruby On Rails_Ruby On Rails 3_Paperclip - Fatal编程技术网

Ruby on rails Rails-纸夹-支持多文件上传

Ruby on rails Rails-纸夹-支持多文件上传,ruby-on-rails,ruby-on-rails-3,paperclip,Ruby On Rails,Ruby On Rails 3,Paperclip,我在Rails 3应用程序上安装了回形针,可以上传一个文件-哇,这很有趣,也很简单 现在的挑战是,允许用户上传多个对象。 是否单击“选择文件”并能够选择多个文件。或者单击“更多”按钮并获取另一个文件上载按钮 我找不到任何教程或宝石来支持这一开箱即用。我知道 任何建议或解决方案。似乎是一种普遍的需要 谢谢我将在第8章介绍这一点。不过,我不涉及上传到S3或调整图像大小 建议你买它完全基于它解决这一个问题可能听起来有点偏颇,但我可以向你保证,它会回答你的其他问题。它将行为驱动的开发方法作为主要主题之一

我在Rails 3应用程序上安装了回形针,可以上传一个文件-哇,这很有趣,也很简单

现在的挑战是,允许用户上传多个对象。 是否单击“选择文件”并能够选择多个文件。或者单击“更多”按钮并获取另一个文件上载按钮

我找不到任何教程或宝石来支持这一开箱即用。我知道

任何建议或解决方案。似乎是一种普遍的需要

谢谢

我将在第8章介绍这一点。不过,我不涉及上传到S3或调整图像大小

建议你买它完全基于它解决这一个问题可能听起来有点偏颇,但我可以向你保证,它会回答你的其他问题。它将行为驱动的开发方法作为主要主题之一,在应用程序开发期间向您介绍Rails特性。这不仅向您展示了如何构建应用程序,还展示了如何使其可维护

至于图片上传后的大小调整,回形针已经有了。我建议你先读一读,然后再问另一个问题,如果你不了解任何选项/方法

至于S3上传,您可以这样做:

has_attached_file :photo, :styles => { ... }, :storage => :s3
您需要使用S3的详细信息来配置回形针::存储::S3,然后回形针也有了相应的设置


祝你好运

好吧,这是一个复杂的问题,但它是可行的。这是我如何让它工作的

在我使用的客户端上,有一个javascript库,它允许通过进度条和拖放支持上传多个文件。它支持良好,高度可配置,基本实现简单:

他认为:

<div id='file-uploader'><noscript><p>Please Enable JavaScript to use the file uploader</p></noscript></div>
当传递文件时,FileUploader会将其作为XHR请求发布到服务器,其中POST正文是原始文件数据,而头和文件名则通过URL字符串传递(这是通过javascript异步上传文件的唯一方法)

这就是它变得复杂的地方,因为曲别针不知道如何处理这些原始请求,所以你必须捕获它们并将其转换回标准文件(最好在它们进入Rails应用程序之前),这样曲别针就可以发挥其神奇的作用。这是通过一些机架中间件完成的,它创建了一个新的临时文件(请记住:Heroku是只读的):

稍后,在application.rb中:

config.middleware.use 'Rack::RawFileStubber'
然后在控制器中:

  def upload
    @foo = modelWithPaperclip.create({ :img => params[:file] })
  end
这工作可靠,但在同时上载大量文件时,这可能是一个缓慢的过程

免责声明


这是为一个只有一个已知且受信任的后端用户的项目实现的。对于高流量的Heroku应用程序,它几乎肯定会对性能产生严重影响,我还没有对它进行安全性测试。也就是说,它确实有效。

Ryan Bigg推荐的方法如下:

Daniel Mendel推荐的
文件上传器
非常棒。这是一个非常棒的用户体验,就像Gmail拖放上传一样。如果您对最新的中间件组件感兴趣,有人写了一篇关于如何使用
rack raw upload
中间件将其与rails应用程序连接起来的博客文章

还有另一个最近更新的插件,它可能很有用

还有一个(包括完整性,我还没有调查过这个。)

这些问题高度相关


忘记添加。我正在上传需要调整大小的图像。这就是为什么我不能直接上传到S3。我用heroku来主持。谢谢谢谢你。。。但是如果它“创建了一个新的临时文件”,那么它与Heroku不兼容吗?除非我遗漏了什么?好吧,赫罗库确实有一个临时图像的地方。其他问题。RawFileStuber类去哪里了?我将raw_文件_stuber.rb文件添加到/lib。。。然后添加了上面的application.rb config设置,并尝试启动服务器(rails s),但遇到了各种错误。Q、 上面的Rails 3友好吗?@Daniel。我想我把它连接好了。我在硬盘上看到临时文件,但它们都是TXT文件。服务器在app/controllers/photos\u controller.rb:4:in
upload'lib/raw\u file\u stuber.rb:13:in
call'@Daniel中出现“无法将nil转换为字符串”错误。这样做的问题还在于,它现在只适用于一种模型。是否有一种通用的方法来支持这一点,从而使它适用于几种不同类型的模型上载?
config.middleware.use 'Rack::RawFileStubber'
  def upload
    @foo = modelWithPaperclip.create({ :img => params[:file] })
  end