2016-07-04 3 views
0

http要求からcsvファイルを読み込もうとしているときに、このバグが発生しています。httpリクエスト(WebService)からCsvファイルを読み取るバグ

私のCSVファイルには、次のようになります。

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

そして、私はこの受けている:私は、それは単に行の最後の文字で消えhttpリクエストを通じて送信するときにどういうわけか

idUser,status123,block456,unblock789,block 

を( '\ n')。私はOpencsvやjavaCsvのような多くの読者を試してきました。また、InputStream、String、fileなど、さまざまな方法でファイルを受け取りました。バグがリクエスタにあるようだが、ChromeのPostmanやfirefoxのOpen HttpRequesterなど、さまざまなリクエスタも試してみた。また、WindowsやLinuxなどのさまざまな環境でファイルを生成することもできます。私はLinuxとviceversaにウィンドウで送信しようとしました。それがうまく動作する唯一の方法は、Base64に変換してサービス内のcsvファイルに解析することでしたが、私のクライアントが常にファイルを変換しないようにしました。もう1つの方法は、リポジトリから直接読み込むことでしたが、WebServiceではありません。私は今すぐファイルを読むためにJavaCsvを使用していますhttps://www.csvreader.com/java_csv_samples.php

私のwebサービス:

@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');の終わりを設定しようとしました:/事前にありがとうございます!

答えて

0

multipart/form-dataを使用しています。このコンテンツタイプは、フォームが<input type="file">の場合に使用されます。

ファイルをアップロードするには、追加の注釈が必要です。残念ながら、JAX-RSでファイルをアップロードする標準的な方法はないようです。実装に依存して、例えばJersey、CXF、RestEasyを使うことができます。このチケットJaxrs multipart

にすべきは、あなたがここにhttps://stackoverflow.com/a/25889454/6371459完全な例を持っているこの

@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) { 

のようなコードを応答を参照してください。

+0

私は前に@FormDataParamを使用していましたが、いくつかの問題がありました。単にInputStreamを直接受け取って、MediaTypeを@Consumes({"text/csv"})私がファイルを正しく読んでいるかどうかを確認して、最後に '\ n'の最後を読んでいないというバグがあります。このMultipart_form_dataを動作させるとこのバグは修正されていると思いますか? – Allan

+0

あなたはhtmlフォームを使用していますか?そうでない場合は、単純に 'application/octet-stream'を使ってバイナリとしてデータを送信してください。フォームを処理する必要がある場合は、ファイルのアップロードを正しく処理する必要があります – pedrofb

+0

はい、クライアントはこのサービスをhtml形式で使用します。最初にマルチパートで作業を行い、結果を確認するためにここで更新します。ありがとう! – Allan

関連する問題