1.配置poi依赖
<!--对应xls\xlsx\pptx\docx\类文件-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
<!--对应doc/ppt/vsd/pub/msg类文件-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>4.0.1</version>
</dependency>
2.配置上传下载需要的工具包
<!-- 上传下载需要的-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
文件上传就是讲本地的资源通过网络传输发送到服务器上。
文件上传的原理其实就是:
IO流实现
↓
通过二进制流的方式向服务器传输数据
↓
服务器再通过流读取到数据
↓
然后解析成文件
↓
最终保存在服务器上
commons-fileupload工具包主要是我们用来操作文件上传的,里面封装了对流操作的全过程
3.在配置文件中添加bean
这个id不可以乱起名字!
用来解析上传的文件
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="1024000"></property>
<property name="maxInMemorySize" value="204800"></property>
<property name="uploadTempDir" value="/"></property>
</bean>
常用属性:
- defaultEncoding:编码字符集
- maxUploadSize:文件的大小限制,默认为-1(无限制,单位字节)
- maxInMemorySize:内存缓冲区大小,超过时写入硬盘,默认为-1
- uploadTempDir:临时文件目录,默认是servlet容器的临时目录
4.jsp页面
<form action="upload" method="post" enctype="multipart/form-data">
File:<input type="file" name="fil">
<input type="submit" value="Submit">
</form>
这里enctype属性
- 默认属性:application/x-www-form-urlencoded,会将表单中的数据变为键值对的形式。
如果action为get,则将表单数据编码为(name=value&name2=value2…)拼接到url后面(eg:http://localhost:8080/ssm/test/upload?id=1)
如果action为post,则浏览器把form数据封装到http body中,然后发送到服务器。 - multipart/form-data
将表单中的数据变为二进制数据上传上去
4.controller层
实现,简单的上传,存储到指定的本机电脑的目录下
重复名字的图片会被覆盖
@RequestMapping("upload")
public String upload(MultipartFile fil, HttpServletRequest request){
if (fil==null){
return "File";
}
//fil.getContentType()文件类型
//fil.getName()是input里面对应得name
System.out.println(fil.getContentType()+"======"+fil.getName());
//file.getOriginalFilename()是文件的名字
//file.getSize()文件大小 B
System.out.println(fil.getOriginalFilename()+"====="+fil.getSize());
//自行指定路径
File f = new File("C:/Users/XXX/Desktop/imgs/");
if(!f.exists()){//如果这个路径下这个文件夹不存在
f.mkdirs();//那么就创建这个文件夹
}
File file = new File(f,fil.getOriginalFilename());
try {
//进行上传 上传到的位置(file中带了路径和文件名)
fil.transferTo(file);
} catch (IOException e) {
e.printStackTrace();
}
return "File";
}