rishabhkeshari123
rishabhkeshari123

Reputation: 143

Image File Upload Through Rest WebService

I have written below code to do it- :)

                @POST
                @Path("/UploadProfileImage")
                @Consumes(MediaType.MULTIPART_FORM_DATA) 
                @Produces(MediaType.APPLICATION_JSON)
              public String uploadProfileImage(@FormDataParam("imageFile") InputStream uploadedImageInputStream,@HeaderParam("mPolicyGroupSeqId")String PolicyGroupSeqId){


        JSONArray arra = new JSONArray();           
LinkedHashMap<String, String> mapObject = new LinkedHashMap<String, String>();
 LinkedHashMap<String,Object > mapObject1 = new LinkedHashMap<String, Object>();
                    ArrayList<Object> LogoList = new ArrayList<Object>();
                    try {

                        System.out.println("upload profile image");
String strPolicyGroupSeqId=TTKCommon.checkNull(PolicyGroupSeqId);

    WebServiceManager webServiceManager=this.getWebServiceManagerObject();

    //byte[]   bytes = IOUtils.toByteArray(uploadedImageInputStream);

                     byte[] bytes = new byte[1024];
                     int bytesRead=0;
                     ByteArrayOutputStream output = new ByteArrayOutputStream();
                     while ((bytesRead = uploadedImageInputStream.read(bytes,0,bytes.length)) != -1)
                     {
                         output.write(bytes, 0, bytesRead);
                     }

                     output.flush();

                     byte[] byteArray = output.toByteArray();


                     String filePath = "D:/Download Here/exist.jpg";


                     FileOutputStream fos = new FileOutputStream(filePath);
                     BufferedOutputStream outputStream = new BufferedOutputStream(fos);
                     outputStream.write(output.toByteArray());

                     outputStream.flush();




                            if(uploadedImageInputStream != null){
                                System.out.println("inputstream is not a null value");
                            }
                            if(bytes != null){
                                System.out.println("bytes is not a null value");
                            }

                       int status=webServiceManager.uploadProfileImageonSubmit(strPolicyGroupSeqId,byteArray,1);     


                        System.out.println(status);

                         mapObject.put("status",""+status);





                       //  outputStream.close();
                        // output.close();  




                    }//end of try 



                    catch (TTKException tte) {              
                        tte.printStackTrace();
                        try{
                             String errorMsg="Error While Searching ProfilePicture Data.....";
                             mapObject.put("status", "F");
                             mapObject.put("error_message",errorMsg);       
                            }catch(Exception ie) {
                            ie.printStackTrace();
                            mapObject.put("status", "F");
                            mapObject.put("error_message", "Error While Searching ProfilePicture Data!.....");  
                             }

                    }catch (Exception e) {
                        e.printStackTrace();
                         mapObject.put("status", "F");
                        mapObject.put("error_message", "Error While Searching ProfilePicture Data?.....");              
                   }

                    arra.put(mapObject);
                    //arra.put(mapObject1);
                    return arra.toString();

                }           

when i am calling below URL from Postman or soap UI tool by passing all required details than its storing byte array successfully in database but that byte array which is coming in input stream object is not proper because if i am converting that byte array in image file also than that image file , i am not able to open.

.please suggest me any other thing i can do for achieving this .help will be highly appreciable.
thanks.

Upvotes: 2

Views: 2643

Answers (2)

rishabhkeshari123
rishabhkeshari123

Reputation: 143

Thanks dsp_user I uesd MediaType.APPLICATION_OCTET_STREAM and from postman i am passing image in binary than its working fine

@SuppressWarnings("unchecked")
            @POST
            @Path("/UploadProfileImage")
            @Consumes(MediaType.APPLICATION_OCTET_STREAM) 
            @Produces(MediaType.APPLICATION_JSON)
            public String uploadProfileImage(@FormDataParam("file")InputStream uploadedImageInputStream,@HeaderParam("mPolicyGroupSeqId")String PolicyGroupSeqId){

                JSONArray arra = new JSONArray();           
                LinkedHashMap<String, String> mapObject = new LinkedHashMap<String, String>();

                try {



                    System.out.println("upload profile image");
                    String strPolicyGroupSeqId=TTKCommon.checkNull(PolicyGroupSeqId);

                    WebServiceManager webServiceManager=this.getWebServiceManagerObject();

                    System.out.println("mPolicyGroupSeqId      "+PolicyGroupSeqId);

                    byte[] bytes = new byte[1024];  

                    bytes   =   org.apache.commons.io.IOUtils.toByteArray(uploadedImageInputStream);

                    /*
                    String filePath = "D:/Download Here/hello.png";

                    FileOutputStream fos = new FileOutputStream(filePath);
                    BufferedOutputStream outputStream = new BufferedOutputStream(fos);
                    outputStream.write(bytes);

                    fos.flush();
                    fos.close();
                    outputStream.flush();
                    outputStream.close();*/

                    System.out.println("kbbsssssssssss  "+bytes.length);





                    int status=webServiceManager.uploadProfileImageonSubmit(strPolicyGroupSeqId,bytes,1);     



                    if(status==1){
                        mapObject.put("status", "P");
                        mapObject.put("message","Profile Picture Uploaded Successfully");
                    }else{
                        mapObject.put("status", "F");
                        mapObject.put("error_message","Profile Picture Not Uploaded Successfully");

                    }

                    System.out.println(status);

                }//end of try 



                catch (TTKException tte) {              
                    tte.printStackTrace();
                    try{
                        String errorMsg="!Error While Uploading ProfilePicture ...";
                        mapObject.put("status", "F");
                        mapObject.put("error_message",errorMsg);        
                    }catch(Exception ie) {
                        ie.printStackTrace();
                        mapObject.put("status", "F");
                        mapObject.put("error_message", "!Error While Uploading ProfilePicture Data ...");   
                    }

                }catch (Exception e) {
                    e.printStackTrace();
                    mapObject.put("status", "F");
                    mapObject.put("error_message", "!Error While Uploading ProfilePicture Data...");                
                }

                arra.put(mapObject);
                return arra.toString();


            }   //end of uploadProfileImage     

Upvotes: 0

dsp_user
dsp_user

Reputation: 2119

This code worked for me (though I tested with a REST console client, not Postman or SoapUI)

    @POST
      @Path("/uploadProfileImage")
      @Produces(MediaType.TEXT_PLAIN)
      @Consumes(MediaType.APPLICATION_OCTET_STREAM)
      public String saveImage(byte[] bytes) throws IOException {

      this.saveImageToFile("D:\Download Here\exist.jpg", bytes);
       return "Image saved";
      }


      private void saveImageToFile(String savedImg, byte[] imgData) throws IOException {

      InputStream in = new ByteArrayInputStream(imgData);
       try {
        BufferedImage buffImage = ImageIO.read(in);
        ImageIO.write(buffImage, "jpg", new File(savedImg));
       } finally {
        if (in != null)
         in.close();
       }

 }

Upvotes: 2

Related Questions