Rails中上传大文件的问题

发布于 2021-11-11 02:19:34 字数 337 浏览 900 评论 8

在Rails项目中上传文件到服务器时候,是从request中读取到文件的内容后保存在服务器上。

如下:

      request.parameters()[:formUploadFile].read.to_s()

但是,如果上传一个1G大小或者更大的文件,用request.parameters()[:formUploadFile].read.to_s()

就会导致内存溢出。不知道rails中有没有办法像java一样从request中读取文件流(file stream),然后再保存到服务器。

谢谢各位啦。

 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

浅沫记忆 2021-11-11 21:24:19

在上传一个很大的文件的时候,rails会想将文件的数据保存到C盘临时目录下面,然后才调用SvcpostController中的readBinary方法。我的想法就是不用rails保存到临时目录这一步,这样可以提高效率。

贱贱哒 2021-11-11 21:20:45

相当于Servlet

仅供参考,没试过1G的文件

把回忆走一遍 2021-11-11 21:02:20
  controller :svcpost do
 get 'svcpost' => :index
 post 'svcpost/xml' => :readText
 post 'svcpost/json' => :readText
 post 'svcpost/image' => :readBinary
  end
class SvcpostController < ApplicationController
 def readBinary
 begin
 request.body.rewind
 len = request.content_length
 File.open("#{Rails.root}/tmp/1.png", 'wb') do |f|
 while len>0 do
      bin = request.body.sysread(1024)
 f.syswrite bin
 len -= bin.size
 end
 end
 render :text => request.headers['User-Agent']
 rescue
 render :text => "#{$!}"
 end
 end

end

命硬 2021-11-11 20:39:16

请问你说的这段代码需要放在哪个地方?

醉酒的小男人 2021-11-11 20:19:16

request.body.rewind

够钟 2021-11-11 20:09:59

还是有问题啊。比如我在我的controller中有个upload_file()方法用来出来文件上传。我上传一个1G大小的文件的时候,rails会先将这个文件的内容保存在C盘下面的一个临时文件中,然后才调用upload_file()方法。有没有可能让浏览器在上传文件的过程中就能调用upload_file啊,别先保存到临时文件。

时光清浅 2021-11-11 18:21:27

read好像有个参数,
request.parameters()[:formUploadFile].read(1024)可以读取1024 bytes, 还需要试下。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文