Feign 發送對象,對象含多個文件


Feign在發送文件時,可以使用Feign-form。

另一種方式,關鍵就是,要將文件轉成Resource,然后使用Spring的MultivalueMap

本次發送的是個對象,對象里含有 文件對象數組Multipartfile[]

前台是將 鍵值對和 文件都放到formdata里去。

發送前,將文件對象數組和屬性都取出,放入multivaluemap,文件轉成bytearrayresource

接收方,spring可以自動識別。

但是需要注意的是,接收方如果把multipartfile直接返回回來,是識別不了的,所以建議在接收方把 file屬性進行序列化忽略。另外(該方式沒有測試,不知道是否可行)或許可以把文件像調用方那樣轉成resource試試 

 

$(document).on('click','.submit',function () {
            var formData = new FormData();
            let arr = $("#rating").serializeArray();
            $(arr).each(function () {
                let name = this.name;
                let value = this.value;
                formData.append(name,value);
            });
            let eachEnd = true;
            $(".fj-ul li").each(function () {
                let $li = $(this);
                let fileid = $li.data("fileid");
                if(isNull(fileid)){
                    let file = $li.data("file");
                    if (file.size == 0) {
                        utils.alerter.show("文件大小是0,不可上傳");
                        eachEnd = false;
                        return eachEnd;
                    }
                    //10M
                    if (file.size > 10 * 1024 * 1024) {
                        utils.alerter.show("文件不可超過10MB");
                        eachEnd = false;
                        return eachEnd;
                    }
                    formData.append("files",file);
                }
            });

            if(eachEnd){
                $.ajax({
                    url:'save',
                    type:'post',
                    data: formData,
                    processData: false,
                    contentType: false,
                    success:function (result) {
                        if(result.isok){

                        }
                        utils.alerter.show(result.msg);
                    },
                    error:function () {
                        utils.alerter.show("請求失敗");
                    }
                });
            }
        });

  

 

 對象:截圖部分字段

調用方

	/**
	 * 保存
	 * @param rating
	 * @return
	 */
	@PostMapping("/save")
	@ResponseBody
	public ApiResult<BoCrmCusRating> save(BoCrmCusRating rating,HttpSession session){
		String loginname = (String) session.getAttribute(SSOLoginInterceptor.LOGINNAME);
		if(rating.getId()==null){
			rating.setCreateUser(loginname);
		}else{
			rating.setUpdateUser(loginname);
		}
		try {
			MultiValueMap map = beanToMultiMap(rating);
			return cusRatingFeign.save(map);
		} catch (Exception e) {
			logger.error("",e);
			return ApiResult.failResult("失敗:"+e.getMessage());
		}
	}

	/**
	 * bean to map
	 * @param t
	 * @param <T>
	 * @return
	 * @throws IllegalAccessException
	 */
	private static <T> MultiValueMap beanToMultiMap(T t) throws Exception {
		MultiValueMap<String,Object> map = new LinkedMultiValueMap<>();
		Class<?> clazz = t.getClass();
		Field[] fields = clazz.getDeclaredFields();
		for (Field field : fields) {
			field.setAccessible(true);
			Object o = field.get(t);
			if(!field.getName().equals("files")){
				map.add(field.getName(), o);
			}else{
				MultipartFile[] files = (MultipartFile[]) o;
				for (MultipartFile file : files) {
					ByteArrayResource resource = new ByteArrayResource(file.getBytes()){
						@Override
						public String getFilename() {
							try {
								return URLEncoder.encode(file.getOriginalFilename(),"UTF-8");
							} catch (UnsupportedEncodingException e) {
								throw new RuntimeException(e.getMessage());
							}
						}
					};
					map.add("files",resource);
				}
			}
		}
		return map;
	}

  

	/**
	 * 保存
	 * @return
	 */
	@RequestMapping(value = "/save",method = RequestMethod.POST,consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
	ApiResult<BoCrmCusRating> save(MultiValueMap map);

  接收方

	/**
	 * 保存
	 * @return
	 */
	@PostMapping("/save")
	public ApiResult<BoCrmCusRating> save(BoCrmCusRating rating){
		return cusRatingService.save(rating);
	}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM