之前介绍了文件下载的两种方式,今天介绍下文件上传的两种方式!
以下两种上传视频共用如下页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>上传视频到服务器</title>
</head>
<body>
<form action="/behavior/demoVideo/addDemoVideo" method="post" enctype="multipart/form-data">
<input type="file" name="file" value="请选择待上传的视频文件" multiple="multiple">
<input TYPE="submit" value="开始上传">
</form>
</body>
</html>
第一种:以视频来演示,图片没有做验证,感兴趣的朋友可以做下验证
/**
* 上传演示视频
* @param file
* @return
*/
@Override
public StateMsg addDemoVideo(MultipartFile file) {
//1、对文件做判空
String fileName = null;
if (Objects.isNull(file) || file.isEmpty()) {
logger.error("文件为空");
return new StateMsg(false,"文件不能为空");
}
try {
byte[] bytes = file.getBytes();
String suffix = file.getOriginalFilename().split("\\.")[1];
fileName = String.valueOf(System.currentTimeMillis())+"."+suffix;
Path path = Paths.get(ConstansPropertity.videoPath + fileName);
//如果没有files文件夹,则创建
if (!Files.isWritable(path)) {
Files.createDirectories(Paths.get(ConstansPropertity.videoPath));
}
//文件写入指定路径
Files.write(path, bytes);
logger.debug("文件写入成功...");
return new StateMsg(true,fileName);
} catch (IOException e) {
e.printStackTrace();
logger.error(e.getMessage());
}
return new StateMsg(true,"文件上传失败");
}
第二种:以上传视频来演示
/**
* 上传演示视频
* @param file
* @return
*/
@Override
public StateMsg addDemoVideo(MultipartFile file) {
//1、对文件做判空
String fileName = null;
if(StringUtils.isEmpty(file.getOriginalFilename())) {
return new StateMsg(false,"文件不能为空");
}
//2、定义文件的存储路径 C:/behavior/video/
File dir = new File(ConstansPropertity.videoPath);
if(! dir.isDirectory()) {
dir.mkdirs();
}
try {
String suffix = file.getOriginalFilename().split("\\.")[1];//截取视频文件后缀名
fileName = String.valueOf(System.currentTimeMillis())+"."+suffix;
//服务端保存文件对象
File fileServer = new File(dir, fileName);
file.transferTo(fileServer);
return new StateMsg(true,fileName);
} catch (IllegalStateException | IOException e) {
// TODO Auto-generated catch block
logger.error(e.getMessage());
}
return new StateMsg(true,"文件上传失败");
}
其中第二种方法是springBoot中自带的,用于单文件上传,多文件(如图片)上传时做如下修改:
多文件上传
页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>上传多个文件到服务器</title>
</head>
<body>
<form action="/behavior/upload/uploadFiles" method="post" enctype="multipart/form-data">
<input type="file" name="uploadFiles" value="请选择文件" multiple="multiple">
<input TYPE="submit" value="上传">
</form>
</body>
</html>
/**
* 上传图片文件
* @param uploadFiles
* @return
*/
public static StateMsg uploadFiles(MultipartFile[] uploadFiles) {
//1、对文件数组做判空
// String name = uploadFiles[0].getOriginalFilename();
if(StringUtils.isEmpty(uploadFiles[0].getOriginalFilename())) {
return new StateMsg(false,"文件不能为空");
}
//2、定义文件的存储路径 C:/behavior/video/pic/
File dir = new File(ConstansPropertity.filePath);
if(! dir.isDirectory()) {
dir.mkdirs();
}
try {
//3、遍历文件数组,一个个上传
for(int i = 0; i < uploadFiles.length; i++) {
MultipartFile uploadFile = uploadFiles[i];
String fileName = uploadFile.getOriginalFilename();
//服务端保存文件对象
File fileServer = new File(dir, fileName);
System.out.println("file文件真实路劲"+fileServer.getAbsolutePath());
//4、实现上传
uploadFile.transferTo(fileServer);
}
return new StateMsg(true,"文件上传成功");
} catch (IllegalStateException | IOException e) {
// TODO Auto-generated catch block
logger.error(e.getMessage());
}
return new StateMsg(true,"文件上传失败");
}