<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
    主站蜘蛛池模板: 午夜福利不卡片在线播放免费| 成年午夜视频免费观看视频| 亚洲免费电影网站| 亚洲欧洲日产国码无码网站 | 国产成人精品日本亚洲语音| 亚洲色欲久久久久综合网| 久草免费手机视频| 亚洲色成人网站WWW永久四虎| 久久久久亚洲精品中文字幕| 亚洲国产高清国产拍精品| 亚洲香蕉成人AV网站在线观看 | 久久久久亚洲AV成人网人人网站| 无码成A毛片免费| 大桥未久亚洲无av码在线| 亚洲日本一区二区三区| 在线涩涩免费观看国产精品| 国产成人亚洲精品影院| 在线视频免费观看高清| 久久久久国色AV免费观看| 亚洲一级特黄特黄的大片| 亚洲精品成人片在线播放| 性做久久久久免费看| 亚洲av成人片在线观看| 亚洲AV永久无码精品| 国产jizzjizz免费看jizz| 91免费在线播放| 国产精品1024在线永久免费 | 亚洲综合欧美色五月俺也去| 亚洲Av无码精品色午夜| 免费国产怡红院在线观看| 黄色大片免费网站| 亚洲精品免费网站| 成全视频在线观看免费高清动漫视频下载| 久久毛片免费看一区二区三区| 亚洲综合久久精品无码色欲| 亚洲国产精久久久久久久| 久久久青草青青国产亚洲免观| 日韩在线免费播放| 18禁超污无遮挡无码免费网站国产| 亚洲中文字幕久久精品蜜桃| 亚洲图片一区二区|