文件上传
为什么要文件上传?
就不说了
文件从哪里上传到哪里?
从客户端到应用服务端,保存到哪里要看存储策略:小网站:工程目录;大网站:分布存储
技术实现
核心包:filupload.jar包
步骤
- 导包:commons-fileupload.jar,commons-io.jar
- form表单注意:,enctype=”multipart/form-data”
- 方法编写
1 | |
2 | import java.io.File; |
3 | import java.io.IOException; |
4 | import java.util.UUID; |
5 | |
6 | import javax.servlet.http.HttpServletRequest; |
7 | |
8 | import org.springframework.stereotype.Controller; |
9 | import org.springframework.web.bind.annotation.RequestMapping; |
10 | import org.springframework.web.multipart.MultipartFile; |
11 | import org.springframework.web.servlet.ModelAndView; |
12 | |
13 | @Controller |
14 | public class FileController { |
15 | |
16 | //springMVC参数绑定功能异常强大,那么能不能帮我们绑定文件对象呢?能 |
17 | @RequestMapping("upload.do") |
18 | public ModelAndView upload(MultipartFile photo,HttpServletRequest request) throws IllegalStateException, IOException |
19 | { |
20 | ModelAndView mav=new ModelAndView(); |
21 | //进行文件的上传 |
22 | //1.进行非空判断 |
23 | if(photo.isEmpty()) |
24 | { |
25 | mav.addObject("message", "请选择文件"); |
26 | mav.setViewName("upload"); |
27 | return mav; |
28 | } |
29 | //2.获取文件名字,希望上传同名字的文件,不会覆盖原有文件,那么怎么做呢? |
30 | String code=UUID.randomUUID().toString().replaceAll("-", "");//意思是把生成的uuid字符串中的-去掉 |
31 | System.out.println("code:"+code); |
32 | String oldName=photo.getOriginalFilename();//获取客户端上传的文件的原始名字:如 a.txt |
33 | System.out.println("oldName:"+oldName); |
34 | String fileNewName=code+oldName.substring(oldName.indexOf("."));// a.txt |
35 | System.out.println("fileNewName:"+fileNewName); |
36 | //3.获取文件的存储路径,把文件保存在tomcat的wepapps下的当前工程目录底下 |
37 | String path=request.getServletContext().getRealPath("/photos"); |
38 | System.out.println("path:"+path);//服务器端的绝对路径 |
39 | File file=new File(path,fileNewName); |
40 | if(!file.getParentFile().exists())//如果这个目录不存在 |
41 | { |
42 | file.getParentFile().mkdirs(); |
43 | System.out.println("创建目录:"+file); |
44 | } |
45 | |
46 | |
47 | //4.写入文件 |
48 | photo.transferTo(file); |
49 | |
50 | mav.addObject("message", "文件上传成功!"); |
51 | mav.addObject("imagePath", "photos/"+fileNewName); |
52 | mav.setViewName("upload"); |
53 | |
54 | return mav; |
55 | } |
56 | |
57 | } |
- 配置文件上传解析器
1 | <bean id="multipartResolver" |
2 | class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> |
3 | <!--上传文件的最大大小,单位为字节 --> |
4 | <property name="maxUploadSize" value="17367648787"></property> |
5 | |
6 | <!-- 上传文件的编码 --> |
7 | <property name="defaultEncoding" value="UTF-8"></property> |
8 | </bean> |