黑马程序员技术交流社区

标题: 【郑州校区】Java的新项目学成在线笔记-day6(三) [打印本页]

作者: 谷粒姐姐    时间: 2019-2-14 14:47
标题: 【郑州校区】Java的新项目学成在线笔记-day6(三)
本帖最后由 谷粒姐姐 于 2019-2-14 16:27 编辑

1.2.6 PageService
在Service中定义保存页面静态文件到服务器物理路径方法:
[AppleScript] 纯文本查看 复制代码
[mw_shl_code=applescript,true]package com.xuecheng.manage_cms_client.service; import com.mongodb.client.gridfs.GridFSBucket; 
import com.mongodb.client.gridfs.GridFSDownloadStream;
import com.mongodb.client.gridfs.model.GridFSFile;
import com.xuecheng.framework.domain.cms.CmsPage;
import com.xuecheng.framework.domain.cms.CmsSite;
import com.xuecheng.framework.domain.cms.response.CmsCode;
import com.xuecheng.framework.exception.ExceptionCast;
import com.xuecheng.manage_cms_client.dao.CmsPageRepository;
import com.xuecheng.manage_cms_client.dao.CmsSiteRepository;

[AppleScript] 纯文本查看 复制代码
import org.apache.commons.io.IOUtils; 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.gridfs.GridFsResource;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import org.springframework.stereotype.Service;   import java.io.*; import java.util.Optional;
  /**  * @author Administrator  * @version 1.0  **/ @Service public class PageService {   
   @Autowired   
CmsPageRepository cmsPageRepository;  
   @Autowired  
   CmsSiteRepository cmsSiteRepository;   
   @Autowired  
  GridFsTemplate gridFsTemplate;   
@Autowired   
  GridFSBucket gridFSBucket;   
   //将页面html保存到页面物理路径
     public void savePageToServerPath(String pageId){   
     Optional<CmsPage> optional = cmsPageRepository.findById(pageId);   
      if(!optional.isPresent()){     
        ExceptionCast.cast(CmsCode.CMS_PAGE_NOTEXISTS);   
      }     
    //取出页面物理路径   
      CmsPage cmsPage = optional.get();  
       //页面所属站点      
   CmsSite cmsSite = this.getCmsSiteById(cmsPage.getSiteId());   
     //页面物理路径   
      String pagePath = cmsSite.getSitePhysicalPath() + cmsPage.getPagePhysicalPath() +  cmsPage.getPageName();   
      //查询页面静态文件   
      String htmlFileId = cmsPage.getHtmlFileId();   
     InputStream inputStream = this.getFileById(htmlFileId);   
     if(inputStream == null){           
  ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_HTMLISNULL);   
      }     
    FileOutputStream fileOutputStream = null;     
    try {      
      fileOutputStream = new FileOutputStream(new File(pagePath));   
          //将文件内容保存到服务物理路径      
       IOUtils.copy(inputStream,fileOutputStream);
        } catch (Exception e) {
e.printStackTrace();   
     }finally {  
           try {            
    inputStream.close();      
      } catch (IOException e) {      
           e.printStackTrace();  
          }   
        try {        
         fileOutputStream.close();   
         } catch (IOException e) {   
             e.printStackTrace();         
    }   
      }  
      }   
  //根据文件id获取文件内容
     public InputStream getFileById(String fileId){   
      try {        
     GridFSFile gridFSFile =  gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(fileId)));   
         GridFSDownloadStream gridFSDownloadStream =  gridFSBucket.openDownloadStream(gridFSFile.getObjectId());         
   GridFsResource gridFsResource = new GridFsResource(gridFSFile,gridFSDownloadStream);     
        return gridFsResource.getInputStream();   
      } catch (IOException e) {     
        e.printStackTrace();   
     }   
     return null;  
   }      
//根据站点id得到站点   
  public CmsSite getCmsSiteById(String siteId){     
    Optional<CmsSite> optional = cmsSiteRepository.findById(siteId);   
     if(optional.isPresent()){         
    CmsSite cmsSite = optional.get();   
        return cmsSite;   
     }      
   return null;  
   } }
[mw_shl_code=applescript,true]
[/mw_shl_code][/mw_shl_code]
1.2.6ConsumerPostPage
在cms client工程的mq包下创建ConsumerPostPage类,ConsumerPostPage作为发布页面的消费客户端,监听 页面发布队列的消息,收到消息后从mongodb下载文件,保存在本地。
[AppleScript] 纯文本查看 复制代码
 
            e.printStackTrace();

        }finally {  
           try {
                inputStream.close();
            } catch (IOException e) {      
          e.printStackTrace();      
      }         
   try {         
        fileOutputStream.close();   
        } catch (IOException e) {   
              e.printStackTrace();     
        }  
       }   
      }  
   //根据文件id获取文件内容   
  public InputStream getFileById(String fileId){  
      try {      
      GridFSFile gridFSFile =  gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(fileId)));      
      GridFSDownloadStream gridFSDownloadStream =  gridFSBucket.openDownloadStream(gridFSFile.getObjectId());             GridFsResource gridFsResource = new GridFsResource(gridFSFile,gridFSDownloadStream);      
       return gridFsResource.getInputStream();   
     } catch (IOException e) {     
        e.printStackTrace();   
     }     
    return null;  
   }     
  //根据站点id得到站点  
   public CmsSite getCmsSiteById(String siteId){   
      Optional<CmsSite> optional = cmsSiteRepository.findById(siteId);   
     if(optional.isPresent()){     
        CmsSite cmsSite = optional.get();     
        return cmsSite;  
      }   
     return null;   
} }
package com.xuecheng.manage_cms_client.mq;  
import com.alibaba.fastjson.JSON;
import com.xuecheng.framework.domain.cms.CmsPage;
import com.xuecheng.manage_cms_client.dao.CmsPageRepository;
import com.xuecheng.manage_cms_client.service.PageService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;  
import java.util.Map;
import java.util.Optional;  
/**  * @author Administrator  * @version 1.0  **/ @Component public class ConsumerPostPage {     private static final Logger LOGGER = LoggerFactory.getLogger(ConsumerPostPage.class);  
   @Autowired  
  CmsPageRepository cmsPageRepository;   
@Autowired
    PageService pageService;   
     @RabbitListener(queues={"${xuecheng.mq.queue}"})
    public void postPage(String msg){   
     //解析消息     
    Map map = JSON.parseObject(msg, Map.class);  
       LOGGER.info("receive cms post page:{}",msg.toString());      
   //取出页面id     
    String pageId = (String) map.get("pageId");   
     //查询页面信息      
  Optional<CmsPage> optional = cmsPageRepository.findById(pageId);     
   if(!optional.isPresent()){   
        LOGGER.error("receive cms post page,cmsPage is null:{}",msg.toString());      
       return ;      
   }      
  //将页面保存到服务器物理路径      
   pageService.savePageToServerPath(pageId);     
    }   
  }









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2