<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 朔望魔刃 閱讀(619) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 久久精品国产精品亚洲人人| 成人免费网站久久久| 无码专区AAAAAA免费视频| 精品国产免费一区二区| 亚洲一区二区三区91| 无码av免费一区二区三区试看| 亚洲AV蜜桃永久无码精品| 99亚洲乱人伦aⅴ精品| 四虎成人免费影院网址| 亚洲午夜电影一区二区三区| 亚洲视频在线观看免费| 亚洲AV无码一区二区二三区入口| fc2成年免费共享视频网站| 国产成人亚洲精品影院| 一级特黄特色的免费大片视频| 日韩亚洲国产二区| 日韩精品免费一线在线观看| 国产免费啪嗒啪嗒视频看看| 麻豆亚洲AV成人无码久久精品| 午夜无遮挡羞羞漫画免费| 国产精品亚洲色图| 亚洲人午夜射精精品日韩| 51午夜精品免费视频| 亚洲AV无码专区国产乱码电影| 久久亚洲免费视频| 亚洲a级片在线观看| 在线观看免费污视频| 羞羞网站在线免费观看| 亚洲毛片αv无线播放一区| 亚洲人成免费网站| 美女18毛片免费视频| 久久精品蜜芽亚洲国产AV| 成人免费看吃奶视频网站| 一级毛片免费在线| 亚洲一区中文字幕久久| 日本免费人成视频播放| 日韩成人免费视频| 亚洲AV无码精品国产成人| 亚洲av无码精品网站| 免费欧洲美女牲交视频| 亚洲一级毛片免费观看|