我们通常会用到文件上传的功能在我们的博客上或者要上传图片,今天就来解决这个 问题
文件上传需要jar包我们要引入所对用的jar包
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
其次就是我们对文件上传的页面
这里很简单,如果需要单文件就直接传一个表单就行,如果需要多个的话就要用到多个表单,
我们在使用form表单中必须要加一个 enctype="multipart/form-data",这个是我们支持上传文件所需要的内容
<form action="/file" method="post" enctype="multipart/form-data">
<input type="file" name="file" /><br /><br />
<input type="file" name="file" /><br /><br />
<input type="submit" value="上传" />
</form>
这个是我的跳转文件目录的Controller层
@Controller
@RequestMapping("/function")
public class FunctionController {
@GetMapping("/file")
public String File(){
return "file";
}
}
这个是我文件上传过后的Controller层
@Controller
public class FileController {
@RequestMapping("/file")
public String myFile(HttpServletRequest request, HttpServletResponse response){
// 创建工厂
DiskFileItemFactory df = new DiskFileItemFactory();
// 使用工厂创建解析器对象
ServletFileUpload fileUpload = new ServletFileUpload(df);
//设置上传单个文件的的大小
fileUpload.setFileSizeMax(1024*1024*3);
//设置上传总文件的大小
fileUpload.setSizeMax(1024*1024*3*10);
//设置响应内容的编码
response.setContentType("text/html;charset=utf-8");
try {
// 使用解析器对象解析request,得到FileItem列表
List<FileItem> list = fileUpload.parseRequest(request);
// 遍历所有表单项
for(FileItem fileItem : list) {
// 如果当前表单项为普通表单项
if(fileItem.isFormField()) {
// 获取当前表单项的字段名称
String fieldName = fileItem.getFieldName();
//获取参数值
String value = fileItem.getString("utf-8");
System.out.println(fieldName+" = "+value);
//如果是文件表单项
} else {//如果当前表单项不是普通表单项,说明就是文件字段
String fileName = fileItem.getName();//获取上传文件的名称
// 获取真实路径,对应${项目目录}/uploads,当然,这个目录必须存在
String savepath = request.getServletContext().getRealPath("/uploads");
File file = new File(savepath);
//如果不存在就创建文件夹
if(!file.exists()){
file.mkdir();
};
//判断表单项提否提交了空的参数
if(fileName != null && !"".equals(fileName)){
//为避免重名生成一个uuid作为文件名的前缀
String prefix = UUID.randomUUID().toString().replace("-", "");
//将文件写入到服务器中
fileItem.write(new File(savepath+"/"+prefix+"_"+fileName));
}
//清楚文件缓存
fileItem.delete();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "file";
}
}
里面对应好了我们上传文件的操作亲测有效!
这是一个最终的效果