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