使用restTemplate上传图片
生活随笔
收集整理的這篇文章主要介紹了
使用restTemplate上传图片
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
網上有很多restTemplate上傳圖片的例子,但是我遇到的坑,卻沒有解決辦法,于是在墻外面找到了解決方案,現分享如下
上送給微信的請求報文必須如上(事實證明少一個filename微信都提示你file不能為空)這個提示誤導兩個小時排查問題
代碼摘要如下:
private ResultModel httpRequestWechatUploadImage(String url,String head,String body,String imageUrl,String imageName){try{//構造請求頭HttpHeaders headers = new HttpHeaders();headers.add("Authorization", head);headers.setContentType(MediaType.MULTIPART_FORM_DATA);ResponseEntity<String> responseEntity;//構建第一個boundaryHttpHeaders metaHeader = new HttpHeaders();metaHeader.setContentType(MediaType.APPLICATION_JSON);HttpEntity<String> jsonHttpEntity = new HttpEntity<>(body, metaHeader);//構建第二個boundaryHttpHeaders pictureHeader = new HttpHeaders();pictureHeader.setContentType(MediaType.IMAGE_JPEG);//不設置此contentDisposition則會報file必填pictureHeader.setContentDispositionFormData("file",imageName);ByteArrayResource bar = new ByteArrayResource(CommonUtils.getByteFromURL(imageUrl));HttpEntity<ByteArrayResource> picturePart = new HttpEntity<>(bar, pictureHeader);//組成bodyMultiValueMap<String, Object> multipartRequest = new LinkedMultiValueMap<>();multipartRequest.add("meta", jsonHttpEntity);multipartRequest.add("file", picturePart);//放body 和 headHttpEntity entity = new HttpEntity(multipartRequest, headers);//請求微信responseEntity = restTemplate().exchange(url,HttpMethod.POST,entity,String.class);if(responseEntity.getStatusCode() == HttpStatus.OK){return new ResultModel(true, responseEntity.getBody());}else{return new ResultModel(false, responseEntity.toString());}} catch(RestClientResponseException ex){System.out.println("rest client exception,body"+ex.getResponseBodyAsString());ex.printStackTrace();return new ResultModel(false,ex.getResponseBodyAsString());} catch (Exception e){System.out.println("exception "+e.getMessage());e.printStackTrace();}return new ResultModel(false,"request wechat system error");}?
總結
以上是生活随笔為你收集整理的使用restTemplate上传图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bshare手动分享网址到QQ空间、朋友
- 下一篇: 2.5 lazy initializat