使用RestRserve上传XLSX数据

时间:2020-04-13 13:40:45

标签: r api xlsx 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)
})

1 个答案:

答案 0 :(得分:3)

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

您可以在此处将正文写入文件,然后以常规方式读取它:

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参数用于响应编码,而不用于请求解码。