zoukankan      html  css  js  c++  java
  • 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);
    	}
    

      

  • 相关阅读:
    欧拉回路 定理
    UESTC 1087 【二分查找】
    POJ 3159 【朴素的差分约束】
    ZOJ 1232 【灵活运用FLOYD】 【图DP】
    POJ 3013 【需要一点点思维...】【乘法分配率】
    POJ 2502 【思维是朴素的最短路 卡输入和建图】
    POJ 2240 【这题貌似可以直接FLOYD 屌丝用SPFA通过枚举找正权值环 顺便学了下map】
    POJ 1860【求解是否存在权值为正的环 屌丝做的第一道权值需要计算的题 想喊一声SPFA万岁】
    POJ 1797 【一种叫做最大生成树的很有趣的贪心】【也可以用dij的变形思想~】
    js 实现slider封装
  • 原文地址:https://www.cnblogs.com/yanqin/p/10452435.html
Copyright © 2011-2022 走看看