本文是使用springboot 作为后端的文件上传案例。
目录
实现效果
Spring Boot 后端部分
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
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.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
@RestController
@RequestMapping(value = "test")
public class TestController {
/**
* 上传一个文件
* @param file 文件
* @param parentId 父级文件
* @return 返回操作结果
*/
final String ROOT = "E://upload";
@PostMapping(value = "up")
public String fileUpload(@RequestParam("uploadfile") MultipartFile file, @RequestParam("parent") String parentId) {
if (!file.isEmpty()) {
try {
if(null == file.getOriginalFilename() || file.getOriginalFilename().equals("")){
return "文件名丢了";
}
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(new File(
ROOT + "/" + file.getOriginalFilename()
))
);
System.out.println(file.getName());
System.out.println(parentId);
System.out.println(file.getOriginalFilename());
System.out.println(file.getSize());
out.write(file.getBytes());
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
return "上传失败";
}
return "上传成功";
} else {
return "上传失败,因为文件是空的.";
}
}
/**
* 上传多个文件
* @param request
* @return
*/
@PostMapping(value = "ups")
public String filesUpload(HttpServletRequest request) {
MultipartHttpServletRequest params = ((MultipartHttpServletRequest) request);
List<MultipartFile> files = params.getFiles("file");
// 接收前端传来的字段
MultipartFile file;
for (MultipartFile multipartFile : files) {
file = multipartFile;
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
// 获取文件名
String origFileName = file.getOriginalFilename();
// 获取文件路径
Path path = Paths.get(ROOT, origFileName);
System.out.println("path:" + path);
// 如果没有files文件夹,则创建
if (!Files.isWritable(path)) {
Files.createDirectories(Paths.get(ROOT));
}
// 文件写入指定路径
Files.write(path, bytes);
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
} else {
return "files upload is fail";
}
}
return "";
}
}
前端部分
要提交文件,需要我们将表单中的提交类型设置为multipart/form-data
如果要支持同时上传多个文件,还需要我们将,接收file 的input 设置为multiple
。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="http://127.0.0.1:8080/test/ups" method="POST" enctype="multipart/form-data">
<input type="file" name="file" multiple />
<label for="key1">其他信息:</label><input type="text" name="key1" />
<button type="submit" >提交</button>
</form>
</body>
</html>