Как мне запретить downloadHandler запрашивать у пользователя местоположение сохранения? Я хочу, чтобы он автоматически сохранялся в указанном месте без запроса

#r #shiny #r-markdown

#r #блестящий #r-уценка

Вопрос:

Я написал блестящее приложение, которое позволяет пользователям создавать и загружать HTML-отчеты rmarkdown. Это работает.

Однако при создании отчета пользователю предлагается указать местоположение сохранения. Я, конечно, могу указать местоположение в имени файла, но пользователю все равно будет предложено.

В идеале я хотел бы, чтобы пользователь нажал кнопку загрузки и автоматически отправил файл в определенное место.

Вот пример приложения, которое работает:

 library(shiny)

shinyApp(
  ui = fluidPage(
    sliderInput("slider", "Slider", 1, 100, 50),
    downloadButton("report", "Generate report"),
  ),
  server = function(input, output) {
    output$report <- downloadHandler(
      # For PDF output, change this to "report.pdf"
      filename = paste("My name", ".html", sep=""),
      content = function(file) {
        # Copy the report file to a temporary directory before processing it, in
        # case we don't have write permissions to the current working dir 
        tempReport <- file.path(tempdir(), "report.Rmd")
        file.copy("report.Rmd", tempReport, overwrite = TRUE)

        # Set up parameters to pass to Rmd document
        params <- list(n = input$slider)

        # Knit the document, passing in the `params` list, and eval it in a
        # child of the global environment (this isolates the code in the document
        # from the code in this app).
        rmarkdown::render(tempReport, output_file = file,
                          params = params,
                          envir = new.env(parent = globalenv())
        )
      }
    )
  }
)
 

и сценарий rmarkdown:

 ---
title: "Dynamic report"
output: html_document
params:
  n: NA
---

  ```{r}
# The `params` object is available in the document.
params$n
```

A plot of `params$n` random points.

```{r}
plot(rnorm(params$n), rnorm(params$n))
```
 

Комментарии:

1. Вы взаимодействуете с блестящими приложениями через веб-браузер. Это было бы угрозой безопасности, если бы веб-браузеры позволяли веб-сайтам просто сохранять любые файлы, которые они хотели, на компьютере пользователя без взаимодействия. Это просто недопустимо. Вам придется написать свой собственный пользовательский веб-браузер, чтобы включить этот тип поведения.

2. Интересно. Есть ли какой-нибудь способ заставить обработчик загрузки отправлять файлы любым другим способом? Например, по электронной почте?

3. @MrFlick интересное решение — написать свой собственный браузер, никогда не думал об этом 🙂 Пит — да, вы можете отправлять электронную почту через shiny, поиск Google, скорее всего, укажет вам на множество потоков stackoverflow, которые показывают разные способы сделать это