This commit is contained in:
tanghc
2019-05-15 14:53:43 +08:00
parent ca5855c149
commit d489bdb4ce
23 changed files with 532 additions and 124 deletions

View File

@@ -1,56 +1,78 @@
package com.gitee.sop.storyweb.controller;
import com.gitee.sop.servercommon.annotation.ApiMapping;
import com.gitee.sop.servercommon.util.UploadUtil;
import com.gitee.sop.storyweb.controller.param.FileUploadParam;
import com.gitee.sop.storyweb.controller.param.FileUploadParam2;
import com.gitee.sop.storyweb.vo.FileUploadVO;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Map;
import java.util.Collection;
/**
* 演示文件上传
*
* @author tanghc
*/
@RestController
public class FileUploadDemoController {
/**
* 接收客户端上传的文件,然后把文件信息返回给客户端
* 方式1将文件写在参数中可直接获取。好处是可以校验是否上传
* @param param
* @param request
* @return
*/
@ApiMapping(value = "demo.file.upload", ignoreValidate = true)
public FileUploadVO file(FileUploadParam param, HttpServletRequest request) {
@ApiMapping(value = "demo.file.upload")
public FileUploadVO file1(FileUploadParam param) {
System.out.println(param.getRemark());
// 获取上传的文件
MultipartFile file1 = param.getFile1();
MultipartFile file2 = param.getFile2();
FileUploadVO vo = new FileUploadVO();
FileUploadVO.FileMeta fileMeta1 = buildFileMeta(file1);
FileUploadVO.FileMeta fileMeta2 = buildFileMeta(file2);
vo.getFiles().add(fileMeta1);
vo.getFiles().add(fileMeta2);
return vo;
}
/**
* 方式2从request中获取上传文件
*
* @param param
* @return
*/
@ApiMapping(value = "demo.file.upload2")
public FileUploadVO file2(FileUploadParam2 param, HttpServletRequest request) {
System.out.println(param.getRemark());
FileUploadVO vo = new FileUploadVO();
//检查form中是否有enctype="multipart/form-data"
if (ServletFileUpload.isMultipartContent(request)) {
//将request变成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multiRequest.getFileMap();
fileMap.entrySet()
.stream()
.forEach(entry->{
MultipartFile multipartFile = entry.getValue();
try {
String fileName = multipartFile.getOriginalFilename();
long size = multipartFile.getSize();
String fileContent = IOUtils.toString(multipartFile.getInputStream(), "UTF-8");
FileUploadVO.FileMeta fileMeta = new FileUploadVO.FileMeta(fileName, size, fileContent);
vo.getFiles().add(fileMeta);
System.out.println(fileContent);
} catch (IOException e) {
e.printStackTrace();
}
});
// 获取上传的文件
Collection<MultipartFile> uploadFiles = UploadUtil.getUploadFiles(request);
for (MultipartFile multipartFile : uploadFiles) {
FileUploadVO.FileMeta fileMeta = buildFileMeta(multipartFile);
vo.getFiles().add(fileMeta);
}
return vo;
}
private FileUploadVO.FileMeta buildFileMeta(MultipartFile multipartFile) {
// 文件名
String fileName = multipartFile.getOriginalFilename();
// 文件大小
long size = multipartFile.getSize();
// 文件内容
String fileContent = null;
try {
fileContent = IOUtils.toString(multipartFile.getInputStream(), "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
return new FileUploadVO.FileMeta(fileName, size, fileContent);
}
}

View File

@@ -1,6 +1,9 @@
package com.gitee.sop.storyweb.controller.param;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.NotNull;
/**
* @author tanghc
@@ -8,4 +11,11 @@ import lombok.Data;
@Data
public class FileUploadParam {
private String remark;
// 上传文件字段名称对应表单中的name属性值
@NotNull(message = "文件1不能为空")
private MultipartFile file1;
@NotNull(message = "文件2不能为空")
private MultipartFile file2;
}

View File

@@ -0,0 +1,12 @@
package com.gitee.sop.storyweb.controller.param;
import lombok.Data;
/**
* @author tanghc
*/
@Data
public class FileUploadParam2 {
private String remark;
}