一般的图片上传要满足三要素:①form表单中要有 enctype="multipart/form-data",②必须是post请求,③有一个文件选择域 <input type="file" />
第一步:使用 tomcat 或者 nginx 作为本地服务器(搭建服务器),
要是使用tomcat:打开conf/server.xml文件,修改端口防止冲突,比如修改为8081,再加上下面这段配置
<Context docBase="C:\work\0365\09springmv\\images" path="/images"/>
解读:1.docBase:图片要上传到电脑的目录地址, 2.path:网络访问路径(虚拟目录, );
要是使用nginx作为服务器:在nginx文件夹下的html文件夹下新建一个文件夹用来保存上传的图片
例如目录:C:\\sofware\\nginx-1.16.0\\html\\images,以后访问
第二步:导入相应的jar包依赖
第三步:在springmvc.xml配置文件配置:
<!--配置文件上传解析器,
1.springmvc框架提供了一个文件上传解析器接口(规范):MultipartResolver
2.需要使用的实现类:CommonsMultipartResolver
3.文件上传解析器bean的id属性值,必须是文件上传解析器接口名称的首字母小写:multipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"></property> <!--配置上传文件的最大大小限制,以字节为单位-->
<property name="maxInMemorySize" value="4096"></property> <!--配置内存缓冲区大小,以字节为单位-->
<property name="defaultEncoding" value="UTF-8"></property> <!--defaultEncoding:配置字符集编码-->
</bean>
// 上面的配置上传文件的大小事spring框架的,要是使用nginx服务器,还可以在nginx的配置文件nginx.conf上配置上传图片大小: client_max_body_size 5m;
第四步:代码开发,业务逻辑
必须要传一个这样类型的参数:MultipartFile file
@service
public class UploadImage{
private static final List ALLOW_IMAGE_TYPE = Arrays.asList("image/jpeg","image/jpg","image/png");
//public static final String IMG_PATH = "E:\\develop\\nginx-1.15.3\\html\\images\\"; nginx服务器
public static final String IMG_PATH = "E:\\springmvc\\images\\";
//public static final String IMG_URL = "http://127.0.0.1/images/"; nginx服务器
public static final String IMG_URL = "http://127.0.0.1:8081/images/";
@RequestMapping("/saveItem.do")
public String localUploadImage(MultipartFile file){
//获取图片的mime类型
String imageMimeType = file.getContentType();
if(!ALLOW_IMAGE_TYPE.contains(imageMimeType)){
//可以抛自定义异常
}
//解析图片内容
BufferedImage bufferedImage = null;
try {
bufferedImage = ImageIO.read(file.getInputStream());
} catch (IOException e) {
//可以抛自定义异常
}
if(bufferedImage==null){
//可以抛自定义异常
}
//得到上传文件的图片名称
String imageName = UUID.randomUUID() + file.getOriginalFilename();
File dest = new File(IMG_PATH + imageName);
try {
file.transferTo(dest); //上传图片的核心代码
} catch (IOException e) {
e.printStackTrace();
}
return IMG_URL+imageName;
}
}