在rails 中返回 zip 檔案

2022-02-14 12:44:06 字數 1286 閱讀 8228

在平日的開發當中我們一般只返回html,json等等,但是偶爾情況下也會使用到其他檔案的返回,比如 pdf ,csv檔案

今天在開發中使用的是將大量的文字返回給使用者。

## 知識點

### tempfile

tempfile 用來生成乙個臨時檔案,它跟file 本身沒太大區別,但是他有兩個重要的特點:

名稱是唯一的

gc 垃圾**,或者ruby退出時會**這個檔案

雖然在例項化乙個tempfile的時候可以傳入乙個引數似乎是名稱,但是實際上實際的檔名稱仍然是獨立的

2.3.1 :005 > tempfile.new("test.txt")

=> #

我們退出pry,cat 這個路徑,是找不到這個檔案的  因為被**了

### send_file

send_file 是 actioncontroller::datastreaming module 裡的乙個方法,可以類似的堪稱是render 接收兩個引數, file_name 和 options, 我們可以通過options  來將這個檔案重新命名

同時 send_file 會根據檔案的副檔名去調整 response header 的型別,非常方便

### gem rubyzip

這是個zip 的gem 包,可以讀zip 寫zip,今天我使用的是乙個簡單的功能,將字串壓到zip當中。注意以下,在使用的時候需要 include zip

知識點說完,那看下最後的**

# 業務模型

def log_zip

tmpfile = tempfile.new("job_log.txt")

outputstream.open(tmpfile) do |zos|

zos.put_next_entry 'log.txt'

zos.puts 'hello world'

sorted_job_steps.each_with_index do |step, index|

zos.puts("*" * 40)

zos.puts("\nstep #, #, status= #, raw_return_value= #\n")

zos.puts(step.log)

zos.puts("\n\n" + "=" * 40 + "\n\n")

endend

tmpfile

enddeflog_zip

tempfile= @job.log_zip

send_file tempfile.path, filename: "job_log.zip"

end

在iPhone上讀寫zip檔案

我查詢過很多個ios的zip檔案庫,不過我會推薦使用objective zip 它通過乙個很自然的objective c的介面包裝了zlib和minizip,同時提供了很友好的功能來訪問歸檔檔案中的元資料。使用十分簡單,從庫中提取如下目錄並加入到專案中 zlib minizip objective ...

rails 在view中引用關聯model值

今天遇到乙個問題。情景是這樣的,有一張表invite和一張group表。group跟invite是一對多關係即 group.rb has many invites invite.rb belongs to group 在建立invite的時候需要同時新增其屬於那個group,這是我就蛋疼了。於是上網...

讀取ZIP中的txt檔案

背景 根據客戶需求,匯入功能需要讀取zip檔案中的多個zip檔案,再分別讀取每個zip檔案中的txt內容,從而將其匯入資料庫中。這裡涉及到的知識點是1 讀取zip 2 讀取檔案流 3 迴圈插入資料庫。詳細內容 將該功能做成乙個工具類,引數定義為檔案路徑。之所以需求要求讀取乙個zip下的多個zip,是...