当前位置: 首页 > 知识库问答 >
问题:

通过Rest网络服务上传图像文件

宋华美
2023-03-14

我已经写了下面的代码来做到这一点 - :)

                @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时,通过传递所有必需的详细信息,而不是它在数据库中成功存储字节数组,但输入流对象中的字节数组是不正确的,因为如果我在图像文件中转换该字节数组也比该图像文件,我无法打开。

请建议我任何其他事情,我可以做来实现这个.help将是非常可观的。
谢谢。

共有2个答案

阎嘉荣
2023-03-14

谢谢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     
祁飞飙
2023-03-14

此代码适用于我(尽管我使用 REST 控制台客户端进行了测试,而不是邮递员或 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();
       }

 }
 类似资料:
  • 我正在尝试通过REST API在服务器上上传文件。我的api请求FormData模型,但Im得到错误。 devtools中得“我得请求”得有效负载 ------WebKitFormBoundaryVpirgXMC3RU3AOFA内容-配置:表单-数据;name=“文件”;filename=“test.jpg”content-type:image/jpeg -----WebKitFormBounda

  • 我必须上传从用户首选的应用程序(Cameta,画廊等)选择后的图像文件。我可以在Imageview中显示结果意图为位图。现在我想上传这个图像后,一个按钮将被点击。我用改装来做到这一点。我跟随ImagePicker类将图像收集到我的Imageview中。 正在收集图像代码: 要将图像上载到服务器,我使用改装库 API接口 我的问题是,在将result intent中的Imageview设置为在服务器

  • 经过一些研究,我发现了一个用于多部分文件上传的开放库。在我的情况下,我想上传一个图像使用PUT请求,其中的图像要么是从画廊或相机选择。以下是我正在使用的资源:1。https://github.com/gotev/android-upload-service2.https://www.simplifiedcoding.net/android-upload-image-to-server/#comme

  • 我有一个rest服务,接受正常参数和文件形式的多部分。 我想用resttemplate将数据和文件发送到上面的rest服务。 在我发送正常字符串数据之前,没有任何问题。一旦我添加了发送字节的代码,然后我开始得到400个坏的请求错误。 客户端代码

  • 我正在通过我的Rails4应用程序中的CarrierWave将图像上传到AWS3的桶中。我也有Cloudfront设置,它目前为我的所有statis资产提供服务(不包括公共上传)。 我如何通过Cloudfront而不是S3服务上传的图像,即使它们存储在S3桶中?我已经找到了这样的教程,但是由于我已经有一个CloudFront发行版在运行,我想知道是否应该为我的公共映像上载添加另一个,或者有没有一种

  • 我试图创建一个apache2网页,允许用户上传nifti(. nii,.nii.gz)文件。 我尝试了两种不同的方法: > 在WSL Ubuntu 18.04上,“move_uploaded_文件($_文件[“fileToUpload”][“tmp_名称”],$target_文件)”不返回任何内容。它完全失败了。 在XAMPP上,页面可以获取PDF、JPG..等文件,但不能获取.nii、.exe(