自定義方法限制上傳圖片(檔案)的格式
阿新 • • 發佈:2019-02-11
import org.apache.catalina.core.ApplicationPart; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; import java.io.IOException; import java.util.Collection; import java.util.List; /** * @author zlw * @date 2018/11/13 * @description */ public class UploadFileInterceptor implements HandlerInterceptor { /** 允許上傳的圖片格式 */ private static final String[] PERMITTED_IMAGE_TYPE = {"jpg", "png"}; @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { //在請求處理之前進行呼叫(Controller方法呼叫之前) // 只有返回true才會繼續向下執行,返回false取消當前請求 return isImageQuealified(httpServletRequest); } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { //請求處理之後進行呼叫,但是在檢視被渲染之前(Controller方法呼叫之後) } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { //在整個請求結束之後被呼叫,也就是在DispatcherServlet 渲染了對應的檢視之後執行(主要是用於進行資源清理工作) } /** * 注意:此方法不具有普適性,只適用於http的post請求,且第一個引數為MultipartFile型別的 * 校驗所攔截的請求中上傳的圖片的格式是否合格 */ private boolean isImageQuealified (HttpServletRequest httpServletRequest) throws IOException, ServletException { Collection<Part> parts = httpServletRequest.getParts(); String fileType = ""; if (null != parts && parts.size() > 0) { List list = (List) parts; ApplicationPart partZero = (ApplicationPart) list.get(0); String zeroName = partZero.getSubmittedFileName(); String trimedName = zeroName.trim(); int lastDotIndex = trimedName.lastIndexOf("."); fileType = trimedName.substring(lastDotIndex + 1, trimedName.length()); } for (String s : PERMITTED_IMAGE_TYPE) { if (fileType.equalsIgnoreCase(s)) { return true; } } return false; } }
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /** * 攔截器註冊配置 */ @Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { /** * 上傳的圖片校驗攔截器,將攔截器作為bean寫入配置中,不能直接new,否則攔截器無法注入服務 */ @Bean public UploadFileInterceptor uploadFileInterceptor() { return new UploadFileInterceptor(); } /** * 攔截器註冊 * * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { // 多個攔截器組成一個攔截器鏈 // addPathPatterns 用於新增攔截規則 // excludePathPatterns 使用者排除攔截 registry.addInterceptor(loginInterceptor()); registry.addInterceptor(uploadFileInterceptor()).addPathPatterns("/pacs/uploadScreenShot");//對上傳圖片介面攔截,做圖片格式校驗 } }