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);
    	}
    

      

  • 相关阅读:
    angularjs 学习理解
    setTimeout和setInterval
    c# 数组
    c# 枚举enum
    T_SQL 字符串函数
    T_SQL 日期函数
    T-SQL函数类型——系统函数
    SqlServer 删除日志
    ASP.NET中JSON的序列化和反序列化
    jquery 选择器
  • 原文地址:https://www.cnblogs.com/yanqin/p/10452435.html
Copyright © 2011-2022 走看看