場景來源:無法給Dubbo接口傳參數,List<MultipartFile> files不支持。
解決方法:Base64將文件序列化為String。Dubbo再解析成List。
List<MultipartFile>轉成String:
public String uploadFj(List<MultipartFile> files){ try { if(files==null||files.size()==0){ throw new RuntimeException("附件為空"); } List<Map<String,Object>>list =new ArrayList<Map<String,Object>>(); for(MultipartFile f:files){ Map<String,Object>map=new HashMap<String,Object>(); String filename = f.getOriginalFilename(); byte[] bytes = f.getBytes(); map.put("fileName", filename); map.put("fileByte", Base64.encodeBase64String(bytes)); list.add(list.size(),map); } String jsonfiles = JSONObject.toJSONString(list); return jsonfiles; } catch (Exception e) { throw new RuntimeException(e.getMessage()); } }
從序列化后的String提取數據:
public void formatUpload01(String fid, String userid, String username, String businesstag, String fileobj){ try { List<Map> attachList=JSONObject.parseArray(fileobj,Map.class); if(attachList!=null && attachList.size()>0){ String fileid = null; for(Map m:attachList){ byte[] fileByte=Base64.decodeBase64(m.get("fileByte")==null?"":m.get("fileByte").toString()); String fileName=m.get("fileName").toString(); } } } catch (Exception e) { throw new RuntimeException(e.getMessage()); } }