A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 谷粒姐姐 于 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);     
    }   
  }




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马