外觀和 shiny::downloadButton() 一樣,但中文檔名在每個瀏覽器都存得對:網址最後一段、
Content-Disposition 標頭(filename 與 filename*)、<a download> 都是同一個檔名。
放在 renderUI() 裡:重畫時重新註冊,網址跟著換,不會拿到舊檔。
Usage
kit_download_button(
session,
id,
label,
filename,
content,
class = NULL,
app = getOption("kitDesign.app", "kit")
)Arguments
- session
模組的 session(id 會自動加上 namespace)。
- id
按鈕 id(不含 namespace)。
- label
按鈕的字,例如「下載 CSV」。
- filename
下載檔名(字串;可以有中文與空白)。
- content
function(file):把檔案寫到file。- class
另外加的 class,例如
kit_btn_class("secondary")、"btn-primary"。- app
app 的名稱:log 訊息用它;檔名全是中文時,舊瀏覽器用的 ASCII 備用名是它的小寫 (「第一波.csv」→「kitjoin.csv」)。預設是
getOption("kitDesign.app", "kit"): app 在.onLoad()設定一次。
Details
檔案在按下載時才寫(content(file),可以讀 reactive)。寫檔出錯時:錯誤寫進 log
(「kit_abort() 的訊息照原文給使用者看,其他錯誤不給內部訊息。
Content-Type 照副檔名:.csv、.zip、.html 用各自的 MIME;其他(.sav、.csv.gz)
都是 application/octet-stream,照 MIME 補副檔名的瀏覽器才不會多加一個副檔名。
See also
kit_test_download()(測試用)
Examples
if (interactive()) {
server <- function(input, output, session) {
output$dl_ui <- shiny::renderUI(kit_download_button(
session, "dl", "下載 CSV", "第一波 資料.csv",
function(file) utils::write.csv(mtcars, file)
))
}
}