【问题标题】:How to store .pdf file in Sqlite using R programming如何使用 R 编程在 Sqlite 中存储 .pdf 文件
【发布时间】:2020-09-19 13:51:26
【问题描述】:

我正在 R-Shiny 上创建一个应用程序,在该应用程序中,我从用户那里获取输入,这些输入存储在支持的 SQLite 数据库中。但我担心的是在我的表单上,我有一个上传文件输入,它基本上接受像 (.PDF ,.jpeg,.png)(截图如下)。

如果用户使用我希望将该文件存储在我的 SQLite 数据库表中以供进一步使用的任何文件上传。但我不知道如何使用 r 编程来实现这一点。

任何帮助将不胜感激。

【问题讨论】:

    标签: r database sqlite web-applications shiny


    【解决方案1】:

    您可以将对象(不是表格的任何 R 输出,例如模型的输出)存储为 SQLite 中的 BLOB,在 R 中为此使用 serialize/unserialize,但在您需要阅读原始 PDF 之前使用 @ 987654323@,这里是一个例子:

    path <- file.path(Sys.getenv("R_DOC_DIR"), "NEWS.pdf")
    
    # see the PDF
    browseURL(path)
    
    # Read raw PDF
    pdf <- readBin(con = path, what = raw(), n = file.info(path)$size)
    
    
    library(RSQLite)
    
    # Connect to DB
    con <- dbConnect(RSQLite::SQLite(), ":memory:")
    
    # Serialize raw pdf
    pdf_serialized <- serialize(pdf, NULL)
    # Create a data.frame
    df <- data.frame(pdfs = I(list(pdf_serialized)))
    
    # Write the table in database
    dbWriteTable(conn = con, name = "mytable", value = df, overwrite = TRUE)
    
    
    # Read your table
    out <- dbReadTable(conn = con, name = "mytable")
    
    # unserialize
    pdf_out <- unserialize(out$pdfs[[1]])
    
    # Write the PDF in a temporary file
    tmp <- tempfile(fileext = ".pdf")
    writeBin(object = pdf_out, con = tmp)
    
    # open it
    browseURL(tmp)
    

    【讨论】:

    • 非常感谢,:) 这很有帮助。只有一件事我还在苦苦挣扎——如何将 pdf(BLOB 对象)写入特定的单元格?在您的解决方案中,您展示了如何使用 dbWriteTable 进行编写,有没有一种方法可以写入(例如使用插入查询)到现有表的特定单元格?
    • 和 Nikhil 一样,我需要将多个 PDF 存储在一个表中,其中一个字段是 blob,并且卡在由多个小块组成的序列化对象中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 2012-07-22
    • 2018-09-05
    相关资源
    最近更新 更多