# 文件上传 请求接口时带上文件 ## 客户端调用 ```java DemoFileUploadRequest request = new DemoFileUploadRequest(); DemoFileUploadModel model = new DemoFileUploadModel(); model.setRemark("上传文件参数"); request.setBizModel(model); List files = new ArrayList<>(); String root = System.getProperty("user.dir"); System.out.println(root); // 这里演示将resources下的两个文件上传到服务器 files.add(new UploadFile("file1", new File(root + "/src/main/resources/file1.txt"))); files.add(new UploadFile("file2", new File(root + "/src/main/resources/file2.txt"))); request.setFiles(files); DemoFileUploadResponse response = client.execute(request); System.out.println("--------------------"); if (response.isSuccess()) { List responseFiles = response.getFiles(); System.out.println("您上传的文件信息:"); responseFiles.stream().forEach(file->{ System.out.println(file); }); } else { System.out.println("errorCode:" + response.getCode() + ",errorMsg:" + response.getMsg()); } System.out.println("--------------------"); ``` 客户端使用`UploadFile`添加上传文件 ```java /** * @param name 表单名称,不能重复 * @param file 文件 * @throws IOException */ public UploadFile(String name, File file) throws IOException { this(name, file.getName(), FileUtil.toBytes(file)); } ``` 其中`name`表示字段名称,相当于``中的name 源码详见sop-sdk ## 服务端接收文件 - 方式1 ```java /** * 方式1:将文件写在参数中,可直接获取。好处是可以校验是否上传 * @param param * @return */ @Open("file.upload") @RequestMapping("file1") public FileUploadVO file1(FileUploadParam param) { System.out.println(param.getRemark()); // 获取上传的文件 MultipartFile file1 = param.getFile1(); MultipartFile file2 = param.getFile2(); ... return vo; } @Data public class FileUploadParam { private String remark; // 上传文件,字段名称对应表单中的name属性值 @NotNull(message = "文件1不能为空") private MultipartFile file1; @NotNull(message = "文件2不能为空") private MultipartFile file2; } ``` 方式1的好处是可以使用`JSR-303`校验文件是否上传 - 方式2 ```java /** * 方式2:从request中获取上传文件 * * @param param * @return */ @Open("file.upload2") @RequestMapping("file2") public FileUploadVO file2(FileUploadParam2 param, HttpServletRequest request) { System.out.println(param.getRemark()); FileUploadVO vo = new FileUploadVO(); // 获取上传的文件 Collection uploadFiles = UploadUtil.getUploadFiles(request); ... return vo; } ``` 微服务端源码参考`FileUploadDemoController.java`