通过Rest WebService上传图像文件

时间:2017-09-13 11:27:50

标签: java arrays rest web-services file-upload

我写下以下代码 - :)

                @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();

                }           

当我通过Postman或soap UI工具调用以下URL时,通过在数据库中成功传递所有必需的详细信息而不是其存储字节数组但是输入流对象中的字节数组是不正确的,因为如果我正在转换该字节数组在图像文件中也不是那个图像文件,我无法打开。

。请告诉我我能做到的任何其他事情。帮助将非常值得注意 感谢。

2 个答案:

答案 0 :(得分:1)

这段代码对我有用(虽然我使用REST控制台客户端测试,而不是Postman或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();
       }

 }

答案 1 :(得分:0)

感谢dsp_user我使用MediaType.APPLICATION_OCTET_STREAM并且从邮递员那里传递二进制图像而不是工作正常

@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