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)

          我參與的團隊

          隨筆分類

          隨筆檔案

          文章分類

          友情鏈接

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 广东省| 东兴市| 历史| 孝义市| 甘泉县| 宁陕县| 亳州市| 宁化县| 汾阳市| 腾冲县| 姜堰市| 梅州市| 盐津县| 娱乐| 邯郸市| 靖安县| 双城市| 凌云县| 建瓯市| 桐城市| 开封市| 孝义市| 秦安县| 炎陵县| 桦川县| 香港| 疏勒县| 青阳县| 汉沽区| 衡山县| 广西| 湖北省| 宽城| 香河县| 孝昌县| 蒲江县| 沽源县| 清水河县| 遂昌县| 平顶山市| 吴忠市|