gpt4 book ai didi

java - 从 http 请求读取 Csv 文件的错误(WebService)

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:41 26 4
gpt4 key购买 nike

我在尝试从 http 请求读取 csv 文件时遇到此错误。

我的 CSV 文件如下所示:

idUser,status
123,block
456,unblock
789,block

我收到了这个:

idUser,status123,block456,unblock789,block 

不知何故,当我通过http请求发送时,它会随着行尾的字符('\n')消失。我尝试过很多 Reader,例如 Opencsv 和 javaCsv。并且还通过多种方式接收文件,如InputStream、String、file。看来错误出在请求者中,我也尝试了不同的请求者,例如Chrome中的Postman和firefox中的Open HttpRequester。并且还可以在Windows和Linux等不同环境下生成文件。我尝试过将 Windows 发送到 Linux,反之亦然。它工作的唯一方法是转换为 Base64 并将其解析为服务内的 csv 文件,但我不希望我的客户一直转换文件。另一种方式是直接从存储库读取,但这样就不会成为 WebService。我现在正在使用 JavaCsv 读取文件 https://www.csvreader.com/java_csv_samples.php

我的网络服务:

@PUT
@Path("/csvReader")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response editByCsvFile(InputStream csvFileInput){
try {
CsvReader csvFile = new CsvReader(new InputStreamReader(csvFileInput));
csvFile.readHeaders();
while (csvFile.readRecord()){
String idUser = csvFile.get("idUser");
String status = csvFile.get("status");

if(status.equals("block")){
blockUser(Long.parseLong(IdUser));
}
if(status.equals("unblock")){
unblockUser(Long.parseLong(IdUser));
}
}
csvFile.close();
} catch (UnsupportedEncodingException ex) {
log.info("Unsupported Encoding", ex);
} catch (IOException ex) {
log.info("IO Exeption", ex);
}
return Response.ok().build();
}

我还尝试直接设置分隔符 csvFile.setDelimiter(','); 和行尾 csvFile.setRecordDelimiter('\n'); 但没有成功:/提前谢谢您!

最佳答案

您正在使用 multipart/form-data 。当您的表单带有 <input type="file">

时,将使用此内容类型

要上传文件,您需要一些附加注释。不幸的是,似乎没有使用 JAX-RS 上传文件的标准方法。取决于实现,例如您可以使用 Jersey、CXF 或 RestEasy。查看此票证中的回复 Jaxrs multipart

代码应该是这样的

@PUT
@Path("/csvReader")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
@DefaultValue("true") @FormDataParam("enabled") boolean enabled,
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) {

这里有一个完整的示例 https://stackoverflow.com/a/25889454/6371459

关于java - 从 http 请求读取 Csv 文件的错误(WebService),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38188028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com