把檔案大小及日期,用口語化來說是多少 KB, MB,而不是說多少 bytes;也不說幾年月日時分上傳,而以多久前上傳該檔;好像是 web2.0 趨勢的呈獻風格,RoR簡單的語法就可完成。
建立刪檔動作
def rmfile
@dlfile = Upfile.find_by_filetoken(params[:filetoken])
# 若沒該檔就中止動作,返回首頁
if @dlfile.nil?
flash[:notice] = "no such file"
redirect_to :action => 'index'
return
end
# 若無上述中止動作則開始將刪檔及從資料庫中移掉該項目
File.delete("/home/ironman/test1/FILES/#{@dlfile.filetoken}")
@dlfile.destroy
flash[:notice] = "#{@dlfile.filename} 已順利刪除!"
redirect_to :action=> 'index'
end
將刪除的連結加到 index 之中
<%= link_to '刪除', {:action=> 'rmfile', :filetoken => file.filetoken}, :confirm => "真的要刪?" -%>
這樣就可以有完整的上傳、下載、刪除的基本動作,而且檔名也不會有編碼不 match 或重覆的問題。
美化顯示格式
看到的結果會是如此
有關檔案的 table 列表部份是複製 CSS table Gallery 裡的 Golden style css 語法。
而將 filetype 的欄位拿掉,因該欄位是為了send_file時所用。而其中比較特別的是檔案大小是以KB,MB來顯示,上傳時間以多少小時或分鍾之前來顯示,刪除的動作的連結改用以垃圾桶的圖型來顯示,主要改變的語法如下:
<td><%= number_to_human_size(file.size) -%></td>
<td><%= distance_of_time_in_words_to_now(file.created_at, include_seconds = true) -%>之前</td>
<td><%= link_to image_tag("del.gif", :alt => '刪除', :border=>0), {:action=> 'rmfile', :filetoken => file.filetoken}, :confirm => "真的要刪?" -%></td>
是分別參考以下的語法即可做出來:
檔案大小語法:http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#M001669
日期語法:http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#M001712
圖型語法:http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html#M001686
將建置到目前為止的程式碼及css放在下列位置:
http://upload.singernew.org/dl/d14-index_html_erb.txt
http://upload.singernew.org/dl/d14-layouts_upfile_html_erb.txt
http://upload.singernew.org/dl/d14-_listitem_html_erb.txt
http://upload.singernew.org/dl/d14-upfile_controller_rb.txt
http://upload.singernew.org/dl/d14-upfile_css.txt
而其中的 index.html.erb 內容中,將一些內容用
<%= render :partial => 'listitem' %>
此語法,寫到 _listitem.html.erb 之中,所以才會多此檔案。
後續的步驟將探討如何區分單位內外來的範圍,再建置可以根據範圍來區分上傳下載及密碼相關的機制。
將這個已建置好的實際可運作的網站,簡稱單位用暫存系統,放置在:
http://alpha.tagbible.net/upfile
單位外可以上傳檔案,只有單位內可下載,
也可以設一下密碼,看看會出現怎樣的狀況;
有設密碼的,也可從單位外去刪該檔案。
測試時千萬不要放敏感性的資料測試喔…
當然也會看到一些裡面放出來可以下載的資料,
看看那個 sexy_layouts.zip 是什麼東西 sexy 喔…