文件上传下载:
1、导入文件上传所需要的包:引进lib文件夹
2、在springMVC-servlet.xml中配置MultipartResolver:
控制器代码:
@Controller
@RequestMapping("/fileUpload")
public class FileUploadController {
private static final String UPLOAD_PATH=“E:/z/javaProjectUp/springMVC/upload/”;//文件上传目录
/*
* 对于文件上传的异常,默认这里是无法处理的 出现异常的地方不在本Controller内
* 可以在multipartResolver 中配置<property name="resolveLazily"
value="true"/>后捕获
*/
@ExceptionHandler(Exception.class)
public ModelAndView myHandleException(Exception exception){
ModelAndView mv=new ModelAndView("/exceptionHandler/exceptionHandlerErr");
mv.addObject("title",exception.getClass().getName());
mv.addObject("msg",exception.getMessage());
StringBuffer stringBuffer=new StringBuffer();
for (StackTraceElement st:exception.getStackTrace()) {
stringBuffer.append(st.toString());
stringBuffer.append("<br>");
}
mv.addObject("exStackTrace",stringBuffer);
return mv;
}
/**
* 演示表单页面
*/
@RequestMapping("/index")
public String uploadPage() {
return "/fileUpload/index";
}
//multipart
@RequestMapping("/upload")
public ModelAndView upload(MultipartFile file,String name) throws IOException {
System.out.println("表单的其他参数:name="+name);
if ("/0".equalsIgnoreCase(name)){
int a=0;
int b=1/a;
}else if ("throw".equalsIgnoreCase(name)){
throw new RuntimeException("throw new RuntimeException");
}
File fileUploadDir=new File(UPLOAD_PATH);
if (!fileUploadDir.exists()){
fileUploadDir.mkdirs();
}
if (file!=null){
//获取上传文件的属性
System.out.println("文件大小:"+file.getSize());
System.out.println("文件类型:"+file.getContentType());
System.out.println("文件名称:"+file.getName());
System.out.println("文件原名:"+file.getOriginalFilename());
//==获取文件扩展名
String fullName=file.getOriginalFilename();//获取文件名
String ext =fullName.substring(fullName.lastIndexOf('.')); //文件扩展名
System.out.println("文件原名:"+ext);
System.out.println("===========================================");
//== 拼接保存的文件名
String saveFileName=System.currentTimeMillis()+ext;//当前时间(毫秒)+扩展名
File saveFile =new File(UPLOAD_PATH, saveFileName);//创建保存文件的File类
//保存文件
file.transferTo(saveFile);//方法一
// file.transferTo("路径");
// FileUtils.writeByteArrayToFile(saveFile,file.getBytes());//方法二
//第三个 Java IO
// InputStream inputStream=file.getInputStream();
ModelAndView mv =new ModelAndView("/fileUpload/result");
mv.addObject("msg", "上传成功!!");
mv.addObject("singleFileName", saveFileName);
return mv;
}else {
ModelAndView mv =new ModelAndView("/fileUpload/result");
mv.addObject("msg", "上传不成功");
return mv;
}
}
//@RequestMapping("/download/{filename}")
//使用restful 风格文件下载比如http://localhost:8080/springmvc/fileUpload/download/1597388581345.jpg
//文件后缀会被忽略掉,导致下载失败
//修改
@RequestMapping("/download/{filename:.+}")
public ResponseEntity<byte[]> download(@PathVariable("filename") String filename)
throws IOException {
System.out.println("下载文件:"+filename);
File file =new File(UPLOAD_PATH, filename);
HttpHeaders headers=new HttpHeaders();
//application/octet-stream二进制流数据(最常见的文件下载)
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//通知浏览器以attachment(下载方式) 下载文件,文件名称为指定名称
headers.setContentDispositionFormData("attachment", filename);
//使用commons-io包读取文件的二进制数据
byte[] bytes=FileUtils.readFileToByteArray(file);
//返回文件
return new ResponseEntity<byte[]>(bytes,headers, HttpStatus.CREATED);
}
}
页面代码:Jsp(index)
单个文件上传 选择文件其他参数
Jsp(result): 上传结果:${msg}
<%--单文件上传显示--%> 下载 ${singleFileName} 页面显示:
选择文件的时候打开本机的上传目录:
选择后页面跳转
点击下载就可以了!
多文件上传
@RequestMapping("/uploads")
public ModelAndView uploads(MultipartFile[] files, String name) {
System.out.println("表单的其他参数:name=" + name);
File fileUploadDir = new File(UPLOAD_PATH);
if (!fileUploadDir.exists()) {
fileUploadDir.mkdirs();
}
if (files != null && files.length > 0) {
List<String> uploadSuccessFileNames = new ArrayList<>();
for (int i = 0; i < files.length; i++) {
try {
MultipartFile file = files[i];
//获取上传文件的属性
System.out.println("第" + (i + 1) + "个文件大小:" + file.getSize());
System.out.println("第" + (i + 1) + "个文件类型:" + file.getContentType());
System.out.println("第" + (i + 1) + "个文件名称:" + file.getName());
System.out.println("第" + (i + 1) + "个文件原名:" + file.getOriginalFilename());
//文件扩展名
String fileName = file.getOriginalFilename();
String ext = fileName.substring(fileName.lastIndexOf("."));
System.out.println("第" + (i + 1) + "个文件扩展名:" + ext);
System.out.println("====================");
//==拼接要保存的文件名称
String saveFileName = System.currentTimeMillis() + ext;
File saveFile = new File(UPLOAD_PATH, saveFileName);
//==保存文件
file.transferTo(saveFile);//方法一
//FileUtils.writeByteArrayToFile(saveFile,file.getBytes());//方法二
//记录成功上传的文件
uploadSuccessFileNames.add(saveFileName);
} catch (IOException e) {
e.printStackTrace();
}
}
String msg = "上传文件" + files.length + "个,成功" + uploadSuccessFileNames.size() + "个";
ModelAndView mv = new ModelAndView("/fileUpload/result");
mv.addObject("msg", msg);
mv.addObject("fileNames", uploadSuccessFileNames);
return mv;
} else {
ModelAndView mv = new ModelAndView("/fileUpload/result");
mv.addObject("msg", "上传不成功");
return mv;
}
}
页面代码jsp(index)
多个文件上传 <%--multiple 允许文件多选--%> 选择文件其他参数
Jsp(result): <%--多文件上传显示--%> 下载 ${fileName}
页面显示:
点击提交:
选择文件的时候打开本机的上传目录:
点击下载就可以了!