文件上传

请求接口时带上文件

客户端调用

  1. DemoFileUploadRequest request = new DemoFileUploadRequest();
  2. DemoFileUploadModel model = new DemoFileUploadModel();
  3. model.setRemark("上传文件参数");
  4. request.setBizModel(model);
  5. List<UploadFile> files = new ArrayList<>();
  6. String root = System.getProperty("user.dir");
  7. System.out.println(root);
  8. // 这里演示将resources下的两个文件上传到服务器
  9. files.add(new UploadFile("file1", new File(root + "/src/main/resources/file1.txt")));
  10. files.add(new UploadFile("file2", new File(root + "/src/main/resources/file2.txt")));
  11. request.setFiles(files);
  12. DemoFileUploadResponse response = client.execute(request);
  13. System.out.println("--------------------");
  14. if (response.isSuccess()) {
  15. List<DemoFileUploadResponse.FileMeta> responseFiles = response.getFiles();
  16. System.out.println("您上传的文件信息:");
  17. responseFiles.stream().forEach(file->{
  18. System.out.println(file);
  19. });
  20. } else {
  21. System.out.println("errorCode:" + response.getCode() + ",errorMsg:" + response.getMsg());
  22. }
  23. System.out.println("--------------------");

客户端使用UploadFile添加上传文件

  1. /**
  2. * @param name 表单名称,不能重复
  3. * @param file 文件
  4. * @throws IOException
  5. */
  6. public UploadFile(String name, File file) throws IOException {
  7. this(name, file.getName(), FileUtil.toBytes(file));
  8. }

其中name表示字段名称,相当于<input type="file" name="file1"/>中的name

源码详见sop-sdk

服务端接收文件

  • 方式1
  1. /**
  2. * 方式1:将文件写在参数中,可直接获取。好处是可以校验是否上传
  3. * @param param
  4. * @return
  5. */
  6. @ApiMapping(value = "demo.file.upload")
  7. public FileUploadVO file1(FileUploadParam param) {
  8. System.out.println(param.getRemark());
  9. // 获取上传的文件
  10. MultipartFile file1 = param.getFile1();
  11. MultipartFile file2 = param.getFile2();
  12. ...
  13. return vo;
  14. }
  15. @Data
  16. public class FileUploadParam {
  17. private String remark;
  18. // 上传文件,字段名称对应表单中的name属性值
  19. @NotNull(message = "文件1不能为空")
  20. private MultipartFile file1;
  21. @NotNull(message = "文件2不能为空")
  22. private MultipartFile file2;
  23. }

方式1的好处是可以使用JSR-303校验文件是否上传

  • 方式2
  1. /**
  2. * 方式2:从request中获取上传文件
  3. *
  4. * @param param
  5. * @return
  6. */
  7. @ApiMapping(value = "demo.file.upload2")
  8. public FileUploadVO file2(FileUploadParam2 param, HttpServletRequest request) {
  9. System.out.println(param.getRemark());
  10. FileUploadVO vo = new FileUploadVO();
  11. // 获取上传的文件
  12. Collection<MultipartFile> uploadFiles = UploadUtil.getUploadFiles(request);
  13. ...
  14. return vo;
  15. }

微服务端源码参考FileUploadDemoController.java