繁体   English   中英

串联字节-将文件作为块写入FTP文件夹

[英]Concatenate bytes - Writing file to FTP folder as chunks

我正在编写一个可以将文件上传到存储的Rails应用程序。 大文件从客户端(使用JS)拆分为多个块,然后将其上传到服务器。

在开发中,我可以简单地打开现有文件,然后在其中写入以下字节。

(我正在使用CarrierWave gem)

File.open(@up_file.link.path, "ab") do |f|
   f.write(up_file_params[:link].read)
end
# This code worked when I upload to '/public' folder in development

但是,现在我想使用FTP服务器来存储文件。 但是我无法将新字节与现有字节连接在一起。

def get_ftp_connection    #  create a new FTP connection
    ftp = Net::FTP.new        
    ftp.connect(ENV['ftp_host'], ENV['ftp_port'])

    begin
        ftp.passive = ENV['ftp_passive']
        ftp.login(ENV['ftp_user'], ENV['ftp_passwd'])

        yield ftp
    ensure
        ftp.quit
    end
end

.....
def create
    .....
    get_ftp_connection @up_file do |ftp|
       full_path = ::File.dirname "#{ENV['ftp_folder']}/#{@up_file.link.path}"
       base_name = File.basename(@up_file.link.to_s)
       ftp.chdir(full_path)                
       ftp.putbinaryfile(up_file_params[:link].read, base_name)
    end
end

我得到了ArgumentError (string contains null byte):putbinaryfile... ,任何帮助:(

如评论中所述,您可以先完全下载文件,然后再上传到ftp服务器。 如果由于某种原因这不是一个选择,则可以在上载远程文件时将其追加:

ftp.storbinary("APPE #{base_name}", up_file_params[:link], Net::FTP::DEFAULT_BLOCKSIZE)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM