2015-01-09 7 views
5

ジャージーウェブサービスを使用して画像をアップロードしようとしています。ジャージークライアントを使用して画像をアップロードしています。 は、入力ストリームを受け取り、サーバ上に画像をアップロードするジャージーウェブサービスです。それは私が直接JSPマルチパートフォームのアップロードを使用して、それを呼び出したときに正常に動作しますが、私はジャージクライアントジャージー画像アップロードクライアント

以下
@POST 
@Path("/upload") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadFile(
     @FormDataParam("file") InputStream uploadedInputStream, 
     @FormDataParam("file") FormDataContentDisposition fileDetail) throws ServiceException 
{ 
    // upload code 
} 

を使用して画像をアップロードする際に失敗した画像をアップロードするジャージーのクライアントで、クライアントコードから呼び出された別のWebサービスの一部でありますPHPの休憩クライアントとこのジャージークライアントの呼び出し、画像をアップロードするためにジャージーウェブサービスを呼び出す場合、私はジャージーのWebサービスを呼び出すと画像は正常に動作しますが、ジャージクライアントを使用してアップロードすると動作しません。

ClientConfig config = new DefaultClientConfig(); 
Client client = Client.create(config); 
client.setChunkedEncodingSize(1024); 
WebResource wr = client 
     .resource("http://localhost:8080/rest/upload"); 

String contentDisposition = "attachment; filename=\"" 
     + fileDetail.getName() + "\""; 
FormDataMultiPart form = new FormDataMultiPart(); 
ContentDisposition contentDisposition2 = new ContentDisposition(contentDisposition); 
form.setContentDisposition(contentDisposition2); 
FormDataBodyPart fdp = new FormDataBodyPart("file", 
     uploadedInputStream, MediaType.MULTIPART_FORM_DATA_TYPE); 
form.bodyPart(fdp); 
ClientResponse response = wr.type(MediaType.MULTIPART_FORM_DATA).post(
     ClientResponse.class, form) 

私はここで何が欠けているのかわかりません。おかげさまで

+0

あなたが「働いていない」ものを明確にすることができ手段? 'uploadedInputStream'に' FileInputStream'型を使って正確なコードをテストしました。うまくいきました。私が変更することの1つは(MediaType.APPLICATION_OCTET_STREAM_TYPEへの 'fdp'の' MediaType.MULTIPART_FORM_DATA_TYPE'です) –

+0

アップロードされたInputStreamをジャージwebserviceに渡していますが、同じものは含んでいません私たちがジャージークライアントから渡したものと同じコンテンツタイプです。 –

+0

フォームデータは、要求の主なコンテンツタイプです。しかし、フォームデータにはパーツが付属しており、各パーツには独自のコンテンツタイプがあります。ファイルはオクテットストリームでフォームデータではありません –

答えて

10

この完全な例は、ジャージクライアントとWebサービス あなたのクライアントコードを使用して画像をアップロードすること

public class Test { 

    private static URI getBaseURI() { 
     return UriBuilder.fromUri("http://localhost:8080/restfullwebservice/resources/generic").build(""); 
    } 

    public static void main(String[] args) throws FileNotFoundException { 
     final ClientConfig config = new DefaultClientConfig(); 
     final Client client = Client.create(config); 

     final WebResource resource = client.resource(getBaseURI()).path("upload"); 

     final File fileToUpload = new File("C:/Users/Public/Pictures/Desert.jpg"); 

     final FormDataMultiPart multiPart = new FormDataMultiPart(); 
     if (fileToUpload != null) { 
      multiPart.bodyPart(new FileDataBodyPart("file", fileToUpload, 
        MediaType.APPLICATION_OCTET_STREAM_TYPE)); 
     } 

     final ClientResponse clientResp = resource.type(
       MediaType.MULTIPART_FORM_DATA_TYPE).post(ClientResponse.class, 
       multiPart); 
     System.out.println("Response: " + clientResp.getClientResponseStatus()); 

     client.destroy(); 
    } 
} 

あなたのWebサービス

@POST 
@Path("upload") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public void uploadFile(@FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) throws ServiceChannelException { 
    OutputStream os = null; 
    try { 
     File fileToUpload = new File("C:/Users/Public/Pictures/Desert1.jpg"); 
     os = new FileOutputStream(fileToUpload); 
     byte[] b = new byte[2048]; 
     int length; 
     while ((length = uploadedInputStream.read(b)) != -1) { 
      os.write(b, 0, length); 
     } 
    } catch (IOException ex) { 
     Logger.getLogger(GenericResource.class.getName()).log(Level.SEVERE, null, ex); 
    } finally { 
     try { 
      os.close(); 
     } catch (IOException ex) { 
      Logger.getLogger(GenericResource.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

全アプリケーション https://github.com/abdotalaat/upladeimageusingjersy

+0

ありがとう、私にお試しください。 –

+0

すべてのことはあなたと大丈夫ですか? NetBeansプロジェクト – abdotalaat

+0

ありがとう、それは素晴らしい作品です... ' –