2016-11-15 5 views
0

ファイルをストレージにアップロードできるRailsアプリを書いています。ビッグファイルはクライアント(JS付き)からチャンクに分割され、パーツをサーバーにアップロードします。バイトを連結する - チャンクとしてFTPフォルダにファイルを書き込む

開発時には、単に既存のファイルを開き、それに次のバイトを書き込むことができます。

(私はCarrierWaveの宝石を使用しています)

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 

コメントで述べたように私はあなたが完全に最初のファイルをダウンロードして、FTPサーバにアップロードすることができた。それが何らかの理由でオプションではありません場合は、putbinaryfile...で任意のヘルプ:(

+1

あなたのサーバー上の一時ファイルにアップロードすることができます。アップロードが完了したら、それをftpサーバーに入れます。 –

答えて

0

ArgumentError (string contains null byte):を得ました、

ftp.storbinary("APPE #{base_name}", up_file_params[:link], Net::FTP::DEFAULT_BLOCKSIZE) 
関連する問題