一般的圖片上傳要滿足三要素:①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;
}
}