java隨記

          堅持就是勝利!

           

          springboot文件上傳等雜項

          1,springboot中文件上傳
          springmvc中配置文件上傳寫法在boot并不支持
          @Bean
          public MultipartResolver multipartResolver() {
          CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
          multipartResolver.setMaxUploadSize(100000000);
          return multipartResolver;
          }
          得這樣寫
            @Bean
             public MultipartConfigElement multipartConfigElement() {
                 MultipartConfigFactory factory = new MultipartConfigFactory();
                 factory.setMaxFileSize("128KB");
                 factory.setMaxRequestSize("128KB");
                 return factory.createMultipartConfig();
             }

          2,攔截器
          繼承HandlerInterceptorAdapter確實可以攔截,但是afterCompletion在preHandle方法返回false后并
          不執行,那么只能在preHandle中處理了,比如轉向,ajax請求返回內容

          3,關于快速跳轉
          有時候只是做一個簡單的跳轉,可以集中寫在這里
          public void addViewControllers(ViewControllerRegistry registry) {
          registry.addViewController("/index").setViewName("/index");
                 registry.addViewController("/converter").setViewName("/converter");
          }

          完整示例:
          package com.example.demo.config;
          import java.util.List;
          import javax.servlet.MultipartConfigElement;
          import org.springframework.boot.web.servlet.MultipartConfigFactory;
          import org.springframework.context.annotation.Bean;
          import org.springframework.context.annotation.Configuration;
          import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
          import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
          import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
          import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
          import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
          import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
          import org.springframework.web.servlet.view.InternalResourceViewResolver;
          import org.springframework.web.servlet.view.JstlView;
          //其中默認配置的 /** 映射到 /static (或/public、/resources、/META-INF/resources) 
          //其中默認配置的 /webjars/** 映射到 classpath:/META-INF/resources/webjars/ 
          /*
          spring.mvc.static-path-pattern=
          @Configuration
          public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
          public void addResourceHandlers(ResourceHandlerRegistry registry) {
          registry.addResourceHandler("/myres/**").addResourceLocations("classpath:/myres/");
          //使用外部目錄 registry.addResourceHandler("/api_files/**").addResourceLocations("file:D:/data/api_files");
          super.addResourceHandlers(registry);
          }
          @Bean
          public InternalResourceViewResolver viewResolver() {
          InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
          viewResolver.setPrefix("/WEB-INF/views/");
          viewResolver.setSuffix(".jsp");
          viewResolver.setViewClass(JstlView.class);
          return viewResolver;
          }
          //攔截器
          @Override
          public void addInterceptors(InterceptorRegistry registry) {// 2
          InterceptorRegistration i=registry.addInterceptor(demoInterceptor());
          i.addPathPatterns("/jsp/*");//只攔截 /jsp/* 的action
          }
          @Bean
          // 1  配置攔截器
          public DemoInterceptor demoInterceptor() {
          return new DemoInterceptor();
          }
          //快速轉向
          @Override
          public void addViewControllers(ViewControllerRegistry registry) {
          // registry.addViewController("/index").setViewName("/index");
          registry.addViewController("/toUpload").setViewName("/upload");
          registry.addViewController("/converter").setViewName("/converter");
          registry.addViewController("/sse").setViewName("/sse");
          registry.addViewController("/async").setViewName("/async");
          }
             @Bean
             public MultipartConfigElement multipartConfigElement() {
                 MultipartConfigFactory factory = new MultipartConfigFactory();
                 factory.setMaxFileSize("128KB");
                 factory.setMaxRequestSize("128KB");
                 return factory.createMultipartConfig();
             }
          }
          攔截器類
          public class DemoInterceptor extends HandlerInterceptorAdapter {// 1
          @Override
          public boolean preHandle(HttpServletRequest request, // 2
          HttpServletResponse response, Object handler) throws Exception {
          long startTime = System.currentTimeMillis();
          System.out.println("本次始請求處理時間為:" + startTime + "ms");
          request.setAttribute("startTime", startTime);
          if (request.getHeader("x-requested-with") != null
          && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
          response.setHeader("sessionstatus", "timeout"); // 響應頭設置session狀態
          } else {
          response.sendRedirect("/");
          }
          return false;
          }
          @Override
          public void postHandle(HttpServletRequest request, // 3
          HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
          long startTime = (Long) request.getAttribute("startTime");
          request.removeAttribute("startTime");
          long endTime = System.currentTimeMillis();
          System.out.println("本次請求處理時間??:" + new Long(endTime - startTime) + "ms");
          request.setAttribute("handlingTime", endTime - startTime);
          }
          }
          文件上傳頁面upload.jsp
          <%@ page language="java" contentType="text/html; charset=UTF-8"
              pageEncoding="UTF-8"%>
          <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>upload page</title>
          </head>
          <body>
          <div class="upload">
          <form action="upload" enctype="multipart/form-data" method="post">
          <input type="file" name="file"/><br/>
          <input type="submit" value="上傳">
          </form>
          </div>
          </body>
          </html>

          文件上傳控制器類

          @Controller
          public class UploadController {
          @RequestMapping(value = "/upload",method = RequestMethod.POST)
          //MultipartFile[] ,涓婁紶澶氫釜鏂囦歡
          public @ResponseBody String upload(@RequestParam("file") MultipartFile file) {//1
          try {
          FileUtils.writeByteArrayToFile(new File("e:/upload/"+file.getOriginalFilename()),
          file.getBytes()); //2
          return "ok";
          } catch (IOException e) {
          e.printStackTrace();
          return "wrong";
          }
          }
          }

          posted on 2017-09-18 11:01 傻 瓜 閱讀(1321) 評論(0)  編輯  收藏 所屬分類: 雜項

          導航

          統計

          常用鏈接

          留言簿(7)

          我參與的團隊

          隨筆分類

          隨筆檔案

          文章分類

          友情鏈接

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 龙里县| 梨树县| 蚌埠市| 崇义县| 石台县| 砚山县| 怀安县| 罗源县| 沂水县| 炉霍县| 新晃| 勃利县| 南召县| 郑州市| 松江区| 平阳县| 和龙市| 汨罗市| 开江县| 夏津县| 林西县| 景洪市| 苍梧县| 东至县| 宁晋县| 梓潼县| 满洲里市| 南宫市| 临桂县| 侯马市| 宁德市| 蓝田县| 建瓯市| 永川市| 巨野县| 云安县| 泸西县| 彝良县| 尉犁县| 渭南市| 宁武县|