加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails将文件上传到ftp服务器

发布时间:2020-12-16 21:40:36 所属栏目:百科 来源:网络整理
导读:我在Rails 2.3.5和 Ruby 1.8.6,并试图找出如何让用户通过我的Rails应用程序将文件上传到不同机器上的FTP服务器.此外,我的Rails应用程序将在Heroku上托管,这不便于将文件写入本地文件系统. index.html.erb % form_tag '/ftp/upload',:method = :post,:multipa
我在Rails 2.3.5和 Ruby 1.8.6,并试图找出如何让用户通过我的Rails应用程序将文件上传到不同机器上的FTP服务器.此外,我的Rails应用程序将在Heroku上托管,这不便于将文件写入本地文件系统.

index.html.erb

<% form_tag '/ftp/upload',:method => :post,:multipart => true do %>
<label for="file">File to Upload</label> <%= file_field_tag "file" %>
<%= submit_tag 'Upload' %>
<% end %>

ftp_controller.rb

require 'net/ftp'

class FtpController < ApplicationController
  def upload
    file = params[:file]
    ftp = Net::FTP.new('remote-ftp-server')
    ftp.login(user = "***",passwd = "***")
    ftp.putbinaryfile(file.read,File.basename(file.original_filename))
    ftp.quit()
  end

  def index
  end

end

目前我只是想让Rails应用程序在我的Windows笔记本电脑上工作.使用上面的代码,我收到这个错误

Errno::ENOENT in FtpController#upload
No such file or directory -.... followed by a dump of the file contents

如果有任何差异,我正在尝试上传CSV文件.任何人都知道发生了什么事

解决方法

经过多次研究和总结,我最后阅读了用于putbinaryfile方法的源代码,以找出一个解决方法来限制putbinaryfile.这是工作代码,替换这一行
ftp.putbinaryfile(file.read,File.basename(file.original_filename))

ftp.storbinary("STOR " + file.original_filename,StringIO.new(file.read),Net::FTP::DEFAULT_BLOCKSIZE)

如果你想知道,STOR是一个原始的FTP命令,是这样的.我很惊讶,这种情况不是很容易被Ruby标准库处理,当然不是很明显需要做什么.

如果您的应用程序在Heroku上,请添加此行

ftp.passive = true

Heroku的防火墙设置不允许FTP活动模式,还要确保您的FTP服务器支持被动模式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读