Java的新项目学成在线笔记-day6(三)

1.2.6 PageService
在Service中定义保存页面静态文件到服务器物理路径方法:


[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;

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下载文件,保存在本地。


            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);     
    }  
  }

猜你喜欢

转载自blog.51cto.com/13517854/2350251
今日推荐