http 요청에서 csv 파일을 읽으려고 할 때이 버그가 발생합니다.http 요청 (WebService)에서 Csv 파일을 읽는 중 버그
내 CSV 파일은 다음과 같다 :
idUser,status
123,block
456,unblock
789,block
그리고이 발생하고 있습니다 : 나는 단순히 줄의 끝의 문자와 함께 사라 요청할 HTTP를 통해 보낼 때 어떻게 든
idUser,status123,block456,unblock789,block
을 ('\엔'). Opencsv 및 javaCsv와 같은 많은 독자를 시험해 보았습니다. 또한 InputStream, String, file과 같은 여러 가지 방식으로 파일을 받았습니다. 버그가 요청자에있는 것 같아요. Chrome의 우편 배달부와 같은 다른 요청자와 firefox의 Open HttpRequester도 시도했습니다. 또한 Windows 및 Linux와 같은 다양한 환경에서 파일을 생성합니다. 나는 창문을 리눅스와 viceversa에 보내려고했다. 유일한 방법은 Base64로 변환하고 서비스 내부의 csv 파일로 구문 분석하는 것이었지만 내 클라이언트가 파일을 항상 변환하지 못하게했습니다. 다른 방법은 저장소에서 직접 읽는 것이었지만 WebService가 아닙니다. 나는 지금 https://www.csvreader.com/java_csv_samples.php 파일을 읽을 때 JavaCsv를 사용하고 있습니다.
내 웹 서비스 :
@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');
의 끝을 설정하기 위해 시도했다 :/사전에 감사합니다!
이전에는 @FormDataParam을 사용했지만 몇 가지 문제가있어 직접 작동하는 InputStream과 MediaType을 @Consumes ({ "text/csv"})로만 수신하기로 결정했습니다. 파일을 올바르게 읽었는지 확인한 다음 '\ n'줄 끝을 읽지 못하는 버그가 있습니다. 이 Multipart_form_data가 작동하면이 버그가 해결 될 것이라고 생각합니까? – Allan
html 양식을 사용하고 있습니까? 그렇지 않다면'application/octet-stream'을 사용하여 데이터를 바이너리로 보내면됩니다. 양식을 처리해야하는 경우 파일 업로드를 올바르게 처리해야합니다. – pedrofb
예, 고객이 HTML 양식을 통해이 서비스를 사용합니다. 먼저 멀티 파트로 작업을 수행 한 다음 여기에서 결과를 확인하여 업데이트합니다. 감사! – Allan