|
|
|
# 文件上传
|
|
|
|
|
|
|
|
请求接口时带上文件
|
|
|
|
|
|
|
|
## 客户端调用
|
|
|
|
|
|
|
|
```java
|
|
|
|
DemoFileUploadRequest request = new DemoFileUploadRequest();
|
|
|
|
|
|
|
|
DemoFileUploadModel model = new DemoFileUploadModel();
|
|
|
|
model.setRemark("上传文件参数");
|
|
|
|
request.setBizModel(model);
|
|
|
|
|
|
|
|
List<UploadFile> 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<DemoFileUploadResponse.FileMeta> 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`表示字段名称,相当于`<input type="file" name="file1"/>`中的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<MultipartFile> uploadFiles = UploadUtil.getUploadFiles(request);
|
|
|
|
...
|
|
|
|
return vo;
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
微服务端源码参考`FileUploadDemoController.java`
|