使用 RestRserve 上传 XLSX 数据

XLSX data upload with RestRserve

我想与 RestRServe 合作上传一个 .xlsx 文件进行处理。我已成功使用 .csv 尝试了以下操作,但对带有 get_file 的 .xlsx 进行了一些细微修改,但没有取得成果。

ps <- r_bg(function(){

  library(RestRserve)
  library(readr)
  library(xlsx)

  app = Application$new(content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
  app$add_post(
    path = "/echo",
    FUN = function(request, response) {
      cnt <- request$get_file("xls")
      dt <- xlsx::read.xlsx(cnt, sheetIndex = 1, header = TRUE)
      response$set_body("some function")
    }
  )

  backend = BackendRserve$new()
  backend$start(app, http_port = 65080)
})

你试过什么? According to the documentation request$get_file() 方法 returns 原始向量 - 文件的二进制表示。我不知道 R packages/functions 允许直接从原始向量读取 xls/xlsx 文件(可能存在这样的函数,我只是不知道)。

在这里你可以将正文写入文件,然后以正常方式读取它:

library(RestRserve)
library(readxl)

app = Application$new()
app$add_post(
  path = "/xls",
  FUN = function(request, response) {
    fl = tempfile(fileext = '.xlsx')
    xls = request$get_file("xls")

    # need to drop attributes as writeBin() 
    # can't write object with attributes
    attributes(xls) = NULL
    writeBin(xls, fl)
    xls = readxl::read_excel(fl, sheet = 1)
    response$set_body("done")
  }
)

backend = BackendRserve$new()
backend$start(app, http_port = 65080)

另请注意,content_type 参数用于响应编码,而不用于请求解码。