2017-03-07 25 views
0

我試圖建立一些rake任務下載ZIP文件。它需要我連接到Gmail並下載作爲附件發送的Zip文件。回報率 - 使用Gmail寶石

我寫了下面的代碼(下載CSV正常工作) -

gmail = Gmail.connect(ENV["USERNAME"], ENV["PASSWORD"]) 
msg = gmail.inbox.find(from: ENV["REC_USER"], 
    subject: args[:subject]) 
dir_path = "lib/mfu_payment_data/" 
Dir.mkdir dir_path unless File.exists?(dir_path) 

if msg.first 
    msg.first.attachments.each do |attachment| 
    File.write(File.join(dir_path,attachment.filename),attachment.body.decoded) 
    end 
end 

它引發以下錯誤 -

rake aborted! 
Encoding::UndefinedConversionError: "\xED" from ASCII-8BIT to UTF-8 

我認爲這已經得到的東西做的attachment.body.decoded,但我不知道如何做到這一點。

+0

你可以嘗試以二進制方式寫:'File.open(File.join(...), 'WB'){|文件| file.write(attachment.body.decoded)}' – Kris

+1

謝謝!!你的建議奏效了。 :) 請不要把它放在答案部分,這樣我可以給予好評的。 –

回答

1

你可以嘗試寫在二進制模式的文件:

File.open('/path/to/file;, 'wb') { |file| file.write(attachment.body.decoded) } 

"b"二進制文件模式 禁止顯示EOL < - > Windows上的CRLF轉換。而 集,除非明確指定 外部編碼爲ASCII-8BIT。

這些模式在IO類從中File繼承中描述。

0

我認爲你有很多選項生成的壓縮文件

Download and unzip

+0

嘿,Sunny,我不想生成zip文件。我想下載它。下載意味着,生成zip文件,然後下載? –

+0

首先,您應該生成zip文件,然後下載它我只是添加代碼也 – Sunny

+0

http://emmanueloga.com/2011/06/21/dowloading-and-unzipping-a-file.html – Sunny