闪亮的应用程序-将用户输入纳入用户定义的功能并下载生成的文件

时间:2019-08-20 15:39:22

标签: r shiny

我正在尝试构建我的第一个Shiny应用。

我有一个用户定义的函数,该函数需要生成加密密钥。我想将其添加到Shiny应用程序中。

我尝试了如下。 UI的第一部分的工作原理是要求输入用户名的文本(应将其用于标记输出文件)-并且我设法获得了一个操作按钮,用户可以单击该按钮以理论上运行代码制作加密密钥。

const appendData = (newValue) => {
    return new Promise(function(resolve, reject){
        const request = indexedDB.open("todos");
        request.onsuccess = (e) => {
            const db = e.target.result;
            const trans = db.transaction(["data"],"readwrite");
            const store = trans.objectStore("data");

            const openCursorReq = store.openCursor(IDBKeyRange.only(newValue.name));
            openCursorReq.onsuccess = (event) => {
                const cursor = event.target.result;
                let oldValue = cursor.value;
                oldValue.value = oldValue.value.concat(newValue.value);
                var updateRequest = cursor.update(oldValue);
                updateRequest.onerror = updateRequest.onblocked = () => {
                    
                    console.log('Error updating');
                    reject();
                };

                updateRequest.onsuccess = function (event) {
                    console.log('update', newValue);
                    resolve();
                };

                trans.oncomplete = function(e) {
                    db.close();
                };
            }
        };
        request.onerror = reject;
    })
};

我觉得在mainPanel中应该有一些东西可以为输出的密钥文件提供链接,或者可以自动下载它们吗?

然后在服务器部分I 1)以sys-date-time为种子 2)输入名称(如上所述)并将其链接到sys-date以为最终密钥创建文件名 3)然后定义我的函数(create.key.pair) -这需要sys-date-time(在上面的1中设置),并使用它和openSSL生成公共和私有密钥。它将使用在第2点输入的名称来标记这些文件(该名称应从闪亮应用程序中UI的侧边栏部分输入)

library(shiny)

# Define UI for ODK Encryption app ----

# Define UI for application that draws a histogram
ui <- fluidPage(

  # Application title
  titlePanel("Make ODK Encryption Keys"),

  # Sidebar with a slider input for number of bins 
  sidebarLayout(
    sidebarPanel(
      textInput("name",
                  "Enter your name:"),
      actionButton(inputId = "input_action", label = "Generate Keys")

    ),

    mainPanel(

    )
  )
)

我需要一些有关是否 A)我需要在mainPanel中添加一些内容以显示/下载输出的文件 B)服务器部分中的代码应该可以工作

我目前无法确定我的错误是在A还是B中,是因为它不会生成密钥(而我的R脚本版本可以正常工作)

首次使用Shiny,因此所有帮助均深表感谢。

1 个答案:

答案 0 :(得分:1)

如果我修复了一些小错误,它会像通常的R脚本一样以闪亮的方式工作:

  1. app.render(req, res, '/posts', { cat: req.params.cat, color: req.params.color }) input$input_action
  2. input$name添加到您的函数中

此外,请勿在{{1​​}}中加载函数,因为这会导致您的应用在每次有人点击key_name时重新加载该函数。您可以改为在应用启动之前将其加载一次。

您的代码是:

observeEvent