2016-09-15 10 views
2

現在、JAX-RSでZipファイルを送受信しようとしています。現在、応答でzipファイルを送信するために、私は以下のコードを使用してそれを達成することができます(ブラウザにURLを入力してzipのダウンロードを確認しました)が、Zipファイルを読むためのコードロジックを書くのは不明です応答から。JavaのレスポンスからZipファイルを読み取るには?

この機能を達成するために手伝ってください。

@GET 
@Produces({"application/zip"}) 
@Path("getProduct") 
public Response getProduct() { 
    String METHODNAME = "getProduct"; 
    if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) { 
      LOGGER.entering(CLASSNAME, METHODNAME); 
    } 
    File file; 
    try { 
     Properties prop = getProp(); 
     file = new File(prop.getProperty("ZipLocation")+prop.getProperty("ProductZip")); 
     byte[] buffer = new byte[5120]; 
     FileOutputStream fos = new FileOutputStream(file); 
     ZipOutputStream zos = new ZipOutputStream(fos); 
     ZipEntry ze= new ZipEntry(prop.getProperty("ProductOutfile")); 
     zos.putNextEntry(ze); 
     FileInputStream in = new FileInputStream("C:\\Documents\\ProductExtract.xml"); 
     int len; 
     while ((len = in.read(buffer)) > 0) { 
      zos.write(buffer, 0, len); 
     } 
     in.close(); 
     zos.closeEntry(); 
     zos.close(); 
    } catch (FileNotFoundException ex) { 
      LOGGER.logp(Level.SEVERE, CLASSNAME, METHODNAME, ex.getMessage(), ex); 
      return Response.status(204).entity(ex.getMessage()).build(); 
    } catch (Exception ex) { 
     LOGGER.logp(Level.SEVERE, CLASSNAME, METHODNAME, ex.getMessage(), ex); 
     return Response.status(204).entity(ex.getMessage()).build(); 
    } 
    return Response.ok(file, "application/zip").header("Content-Disposition", "attachment; filename=\""+file.getName()+"\"") 
      .header("Content-Type", "application/zip").header("Set-Cookie", "fileDownload=true; path=/").build(); 
} 

上記のコードの応答からどのようにzipファイルを読み取ることができますか教えてください。

+1

これと同じである必要がありますか? http://stackoverflow.com/questions/23869228/how-to-read-file-from-zip-using-inputstream – Ming

+0

クライアントはどのように見えますか? Javaクライアントですか? JAX-RSクライアントAPIを使用していますか? –

+0

@CássioMazzochiMolinそのJavaクライアントです。 JAX-RS APIのみを使用します。私は、JavaからのこのサービスのHTTP呼び出しを行うつもりです。 –

答えて

4

あなたがJAX-RS Client APIを使用していたら、あなたのクライアントコードは次のようになります次にZipInputStreamの内容を読んで

Client client = ClientBuilder.newClient(); 
InputStream is = client.target("http://localhost:8080") 
         .path("api").path("getProduct") 
         .request().accept("application/zip") 
         .get(InputStream.class); 

ZipInputStream zis = new ZipInputStream(is); 

+0

私は 'zis.read()'や 'zis.read(byte)'を実行すると値が-1になります。これはストリームが空であるようです。しかし私がPOSTMANから電話をかけると、Webサービスからの応答が得られます。また、ブラウザにURLを入力することでチェックします。私はzipファイルをダウンロードできます。 –

+0

@GautamR '-1'は別の意味を持っています。 [documentation](https://docs.oracle.com/javase/8/docs/api/java/util/zip/ZipInputStream.html#read-byte:A-int-int-)を確認してください。 –

+0

私はこの文書でこれを見つけます。 **戻り値: 実際の読み込みバイト数、またはエントリの終わりに達すると-1 **'read()'を実行して開始時に-1を取得すると、そのストリームは空の。 –

関連する問題