下面是用SpringBoot完成文件上传的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| @Controller @RequestMapping("/upload") public class UploadController {
@ResponseBody @RequestMapping("/upload") public String httpUpload(@RequestParam("files") MultipartFile files[]){ String uploadFilePath="D:\\laiscdata"; JSONObject object=new JSONObject(); for(int i=0;i<files.length;i++){ String fileName = files[i].getOriginalFilename(); File dest = new File(uploadFilePath +'\\'+ fileName); if (!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); } try { files[i].transferTo(dest); } catch (Exception e) { System.out.println("程序错误:"+e); object.put("success",2); object.put("result","程序错误,请重新上传"); return object.toString(); } } object.put("success",1); object.put("result","文件上传成功"); return object.toString(); }
}
|
上面的代码看起来有点多,其实就是一个上传的方法,首先通过 MultipartFile 接收文件。这里我用的是file[] 数组接收文件,这是为了兼容多文件上传的情况,如果只用file 接收,然后在接口上传多个文件的话,只会接收最后一个文件。这里大家注意一下。看自己的需求,我这里兼容多文件所以用数组接收。
然后遍历files 获取文件,下面这段代码是判断文件在所在目录是否存在,如果不存在就创建对应的目录。
1 2 3 4
| File dest = new File(uploadFilePath +'\\'+ fileName); if (!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); }
|
下面就是将文件存放到对应的服务器,这里有一点需要说明一下,如果我们上传重复的文件会怎么样么?上传重复的文件不会报错,后上传的文件会直接覆盖已经上传的文件。
1
| files[i].transferTo(dest);
|
测试:
下面是HTML的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <form method="post" enctype="multipart/form-data" action="http://localhost:8088/upload/upload"> <p>请选择要上传的文件:</p> <p><input type="file" name="files" /></p> <p><input type="submit" value="上传" /></p> </form> </body> </html>
|