2016-04-25 10 views
3

のREST APIジャージでファイルのサイズを取得するが、私は、ファイルのサイズを読みたいと私は、ファイルのサイズを読み取るためのコードの下に使用されてきた方法私はそれが正常に動作している。この中で、残りのAPIをした

@POST 
@Path("/test") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response upload(FormDataMultiPart form){ 
    System.out.println(" size of file="+ filePart.getContentDisposition().getSize()); 
} 

しかし、私はファイル-1のサイズを得ました。

ファイルの実際のサイズをどのように読み取ることができますか?

しかし

System.out.println(" data name ="+ filePart.getContentDisposition().getFileName()); 

を使用して私は、ファイルの正しい名前を得ました。

+0

を注入' HttpServletRequest'と 'request.getContentLengthを()'してみてください。 –

答えて

0

希望はこれです。私は私のシステムでそれを確認しました。これはファイルのサイズをバイト単位で表示します。

@POST 
@Path("/upload") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadFile(@FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) { 

    String uploadedFileLocation = "/home/Desktop/" + fileDetail.getFileName(); 
    // save it 
    writeToFile(uploadedInputStream, uploadedFileLocation); 
    File file = new File(uploadedFileLocation); 
    System.out.println(file.length() + " in bytes"); 
    String output = "File uploaded to : " + uploadedFileLocation; 
    return Response.status(200).entity(output).build(); 
} 

// save uploaded file to new location 
private void writeToFile(InputStream uploadedInputStream, String uploadedFileLocation) { 

    try { 
     OutputStream out = new FileOutputStream(new File(uploadedFileLocation)); 
     int read = 0; 
     byte[] bytes = new byte[1024]; 
     out = new FileOutputStream(new File(uploadedFileLocation)); 
     while ((read = uploadedInputStream.read(bytes)) != -1) { 
      out.write(bytes, 0, read); 
     } 
     out.flush(); 
     out.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

また、リソースの設定を拡張して、アプリケーションのクラスにこれを追加し、あなたのpom.xmlに

<dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-multipart</artifactId> 
     <version>2.13</version> 
</dependency> 

を次の依存関係を持っていることを確認してください。これにより、ジャージーにマルチパートのコンテンツが登録されたクラスが登録されます。 `@ContextのHttpServletRequest request`を使用して、あなたの方法で

super(YourClass.class, MultiPartFeature.class); 
+0

解決策を使用すると、サイズを決定する前にストリームをファイルに書き込む必要があります。ここでの課題は、ストリーム全体を処理する前にアップロードされたサイズを知ることです。 –

0

HttpServletRequestをお試しください。詳細については、ドキュメントを参照してください。

@Consumes(MediaType.MULTIPART_FORM_DATA) 
    public Response putFile(@Context HttpServletRequest request){ 
     Part part = request.getPart("filename"); 
     long fileSize = part.getSize(); 
    } 
関連する問題