<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-95  評論-31  文章-10  trackbacks-0
    問題:
    1: 以jar方式main方法運行嵌入式web容器
    2: 每次重啟,會在/tmp/tomcat下面生成不同的context目錄,這樣會導致每次訪問之前上傳的文件失敗




    解決思路:
    1: 把上傳文件放到非上下文目錄,比如E:\\tomcat 或者/home/test/upload
    2: 把這個目錄作為spring-boot的靜態資源目錄
    3: 就可以通過鏈接訪問http://xxxx:8080/app/static/1.img

    實現:
    1: 一般情況,會用如下代碼獲取上下文路徑:
    String path = request.getSession().getServletContext().getRealPath(File.separator);        
    2: 然后在該path下面創建static或者resources目錄,放入上傳文件,直接鏈接訪問http://xxxx:8080/app/static/1.img 即可
    3: 但這種方式,會出現上述問題,部署重啟后,會丟失之前上傳的文件,因為是在上下文路徑都變了。


    最終實現:
    1: 在application-dev.properties里面
    # mvc配置
    file.upload.path=E:\\upload-files
    # 默認所有路徑
    spring.mvc.static-path-pattern=/**
    # 增加file:${file.upload.path} 表示磁盤路徑為靜態資源路徑
    spring.resources.static-locations=classpath:/META-INF/resources/, classpath:/resources/,classpath:/static/, classpath:/public/,file:${file.upload.path}

    2: 在代碼里面

        @Value("${file.upload.path}")
        private String uploadPath ;

       /**
         * 獲取上傳的圖片地址
         * 
    @param multipartFiles 多文件實體
         * 
    @return json路徑
         
    */
        public String getPhotoPaths(HttpServletRequest request, MultipartFile[] multipartFiles, String accountId,String fileType){
            List<String> imageResult = Lists.newArrayList();
            //獲取當前web根路徑
    //        String path = request.getSession().getServletContext().getRealPath(File.separator);

            LOGGER.info("當前path:"+uploadPath);

            String currentDate = DateFormatUtils.format(new Date(),"yyyMMddHHmmss");
            //文件磁盤路徑
            String imageDirectory = uploadPath.concat(File.separator)
                    .concat("static").concat(File.separator)
                    .concat("images").concat(File.separator)
                    .concat(accountId).concat(File.separator)
                    .concat(fileType).concat(File.separator)
                    .concat(currentDate);
            //創建上傳的磁盤路徑
            FileUtils.createDirectory(imageDirectory);
            //文件相對路徑
            String imageRelativeDirectory = StringUtils.substring(imageDirectory,imageDirectory.indexOf("static"),imageDirectory.length());
            for(MultipartFile multipartFile : multipartFiles){
                try {
                    String fileName = multipartFile.getOriginalFilename();
                    String fileNameWithPath = imageDirectory.concat(File.separator).concat(fileName);
                    multipartFile.transferTo(new File(fileNameWithPath));
                    String fileNameWithRelativePath = imageRelativeDirectory.concat(File.separator).concat(fileName);
                    imageResult.add(fileNameWithRelativePath);
                } catch (IOException e) {
                    LOGGER.error("上傳文件失敗 {}", e.getMessage() );
                }
            }
            return jsonMapper.toJson(imageResult);
        }

    3: 然后直接訪問http://xxxx:8080/static/images/123/1.img 
    4: 需要注意這里的/static/images/123相對路徑要唯一,否則會被classpath下面的static目錄下相同文件所覆蓋。
     
    完!




    posted on 2017-11-08 14:31 朔望魔刃 閱讀(623) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 破了亲妺妺的处免费视频国产| 99久在线国内在线播放免费观看| 色www永久免费视频| 亚洲色偷偷色噜噜狠狠99| 好吊妞在线成人免费| 亚洲另类无码一区二区三区| 成人a视频片在线观看免费| 亚洲人成www在线播放| 精品久久洲久久久久护士免费| 亚洲AV无码专区在线电影成人| 四色在线精品免费观看| 处破女第一次亚洲18分钟| 免费人成无码大片在线观看| 一区二区三区免费视频网站| 美腿丝袜亚洲综合| 久久精品视频免费看| 亚洲成a人片在线观看中文!!! | 免费无码又爽又刺激毛片| 亚洲国产精品自在自线观看| 免费一级毛片一级毛片aa| 国产精品内射视频免费| 亚洲国产精品人久久| 免费可以在线看A∨网站| 国产亚洲精彩视频| 伊人久久大香线蕉亚洲| 亚洲免费闲人蜜桃| 国产精品久久久久久亚洲影视 | 亚洲国产成人久久综合区| 国产精品成人啪精品视频免费| 亚洲人成亚洲精品| 免费理论片51人人看电影| 中文字幕乱码系列免费| 亚洲三级在线播放| 免费吃奶摸下激烈视频| 无码成A毛片免费| 亚洲日韩AV一区二区三区中文| 国产亚洲精品a在线观看| 免费视频爱爱太爽了| 一边摸一边爽一边叫床免费视频 | 黄色永久免费网站| 污污视频免费观看网站|