如何在Plumber API中接收POST请求体中的两个CSV文件?
解决Plumber API接收并解析两个CSV文件的问题
你的基础代码框架是正确的,使用@parser multipart/form-data是处理文件上传的正确选择。下面是具体的完善步骤和代码示例:
核心要点说明
parser_csv适用于请求体本身就是纯CSV内容的场景(比如请求头Content-Type: text/csv),而你当前是通过表单上传文件,所以不需要用它,继续使用multipart/form-data解析器即可。req$files中的每个文件对象包含临时文件路径($tempfile),你需要通过这个路径读取CSV内容为数据框。
完善后的代码
#* Process two CSV files in the request body #* @post /process_files #* @parser multipart/form-data function(req, res) { # 验证文件数量 if (is.null(req$files) || length(req$files) < 2) { res$status <- 400 res$body <- '{"error": "Two CSV files must be included in the request."}' return() } # 获取文件对象 file1 <- req$files$file1 file2 <- req$files$file2 # 验证文件是否为CSV(可选但建议) if (!grepl("\\.csv$", file1$filename, ignore.case = TRUE)) { res$status <- 400 res$body <- '{"error": "file1 must be a valid CSV file."}' return() } if (!grepl("\\.csv$", file2$filename, ignore.case = TRUE)) { res$status <- 400 res$body <- '{"error": "file2 must be a valid CSV file."}' return() } # 读取CSV为数据框并捕获解析错误 tryCatch({ df1 <- read.csv(file1$tempfile, stringsAsFactors = FALSE) df2 <- read.csv(file2$tempfile, stringsAsFactors = FALSE) }, error = function(e) { res$status <- 400 res$body <- paste0('{"error": "Failed to parse CSV files: ', e$message, '"}') return() }) # 这里编写你的数据处理逻辑 # 示例:返回两个文件的行数统计 process_result <- list( file1_rows = nrow(df1), file2_rows = nrow(df2), message = "Files processed successfully." ) # 返回JSON格式结果 res$status <- 200 res$body <- jsonlite::toJSON(process_result, auto_unbox = TRUE) }
Postman请求设置
- 选择POST请求,URL填写你的Plumber接口地址(比如
http://localhost:8000/process_files)。 - 切换到Body标签,选择
form-data类型。 - 添加两个键值对:
- 第一个key设为
file1,类型选择File,然后选择本地的CSV文件。 - 第二个key设为
file2,同样选择File并上传第二个CSV文件。
- 第一个key设为
- 发送请求即可。
内容的提问来源于stack exchange,提问作者Akram HECINI
相关产品推荐
相关产品推荐

