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)

          我參與的團隊

          隨筆分類

          隨筆檔案

          文章分類

          友情鏈接

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阿克苏市| 大庆市| 济阳县| 佛坪县| 申扎县| 开平市| 娱乐| 滕州市| 天峨县| 峨山| 台北市| 兴和县| 焉耆| 增城市| 隆子县| 文昌市| 公安县| 扬中市| 武清区| 盈江县| 泾川县| 潢川县| 佳木斯市| 兴城市| 屏东市| 光山县| 准格尔旗| 永寿县| 江山市| 洱源县| 扎赉特旗| 吴旗县| 黔东| 珲春市| 大方县| 吉隆县| 柳林县| 静乐县| 青岛市| 余干县| 五莲县|