springMVC实现文件上传共有三种方式:
1. 流的方式
2. springMvc自带的方式
3. spring提供的方式
推荐使用spring提供的方式
实现步骤
1 文件上传要采用表单提交的方式,并且在提交的属性中加入属性 enctype
enctype="multipart/form-data"
2 在springMvc的配置文件中加入文件上传的拦截器
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- set the max upload size100MB -->
<property name="maxUploadSize">
<value>104857600</value>
</property>
<property name="maxInMemorySize">
<value>4096</value>
</property>
<property name="defaultEncoding">
<value>utf-8</value>
</property>
</bean>
3 在controller中加入代码
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if(multipartResolver.isMultipart(request))
{
//将request变成多部分request
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
//获取multiRequest 中所有的文件名
Iterator iter=multiRequest.getFileNames();
while(iter.hasNext())
{
//一次遍历所有文件
MultipartFile file=multiRequest.getFile(iter.next().toString());
if(file!=null)
{
//获取文件的后缀名
String expresion = "";
int i = file.getOriginalFilename().lastIndexOf(".");
if (i != -1){
expresion = file.getOriginalFilename().substring(i + 1);
}
//拼接生成新的文件的名字使用随机数
String path=UUID.randomUUID().toString()+"."+expresion;
//上传并保存到服务器的对应地址下
file.transferTo(new File(request.getServletContext().getRealPath("/statics/files/"+
path)));
product.setFileName(path);
}
}
}