| 
					
				 | 
			
			
				@ -0,0 +1,385 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.hos.rest.services.crawler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.mongodb.client.MongoDatabase; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.mongodb.client.gridfs.GridFSBucket; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.mongodb.client.gridfs.GridFSBuckets; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.mongodb.client.gridfs.model.GridFSUploadOptions; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.mongodb.gridfs.GridFSDBFile; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.hos.core.file.FileUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import eu.medsea.mimeutil.MimeUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.bson.Document; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.bson.types.ObjectId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.data.mongodb.core.query.Query; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.data.mongodb.gridfs.GridFsCriteria; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.data.mongodb.gridfs.GridFsOperations; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Component; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.io.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.sql.Blob; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * MongoDB GridFS 操作类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * @author HZY 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * @vsrsion 1.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Created at 2016/7/21. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				@Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				public class GridFSUtil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static final int defaultChunkSize = 1024 * 1024 * 4; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static GridFsOperations gridFsOperations; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static ObjectId uploadFile( Blob blob, String fileType, Map<String, Object> params) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        String fileName = UUID.randomUUID().toString() + "." + fileType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //自定义字段 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Document metaDocument = new Document(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (params != null && params.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (Map.Entry<String, Object> entry : params.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String key = entry.getKey(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                metaDocument.append(key, entry.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // Create some custom options 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        GridFSUploadOptions gridFSUploadOptions = new GridFSUploadOptions() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                .chunkSizeBytes(defaultChunkSize).metadata(metaDocument); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            com.mongodb.gridfs.GridFSFile gridFSFile = gridFsOperations.store(blob.getBinaryStream(), gridFSUploadOptions); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (gridFSFile != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return (ObjectId) gridFSFile.getId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 上传文件至Mongodb by GridFS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param filePath        上传的文件路径 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param saveFileName   保存到mongo的文件名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param params          自定义保存字段 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static String uploadFile(String filePath,String saveFileName, Map<String, Object> params) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //自定义字段 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Document metaDocument = new Document(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (params != null && params.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (Map.Entry<String, Object> entry : params.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String key = entry.getKey(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                metaDocument.append(key, entry.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // Create some custom options 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        FileInputStream fileInputStream = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            File readFile = new File(filePath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            fileInputStream = new FileInputStream(readFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            gridFsOperations.delete(Query.query(GridFsCriteria.where("filename").is(saveFileName)));//删除原来的文件,保证唯一 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            com.mongodb.gridfs.GridFSFile gridFSFile = gridFsOperations.store(fileInputStream,saveFileName,"",metaDocument); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (gridFSFile != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return saveFileName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (fileInputStream != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    fileInputStream.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 从 mongodb GridFS 下载文件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param dbName   数据库名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param savePath 文件保存路径 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param objectId GridFS文件保存ObjectId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static String downFile(String dbName, String savePath, ObjectId objectId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        FileOutputStream fileOutputStream = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            GridFSDBFile gridFSDBFile = gridFsOperations.findOne(Query.query(GridFsCriteria.where("_id").is(objectId))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            fileOutputStream = new FileOutputStream(savePath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            gridFSDBFile.writeTo(fileOutputStream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return savePath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (fileOutputStream != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    fileOutputStream.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 批量下载文件保存(根据 fs.files集合) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param dbName   数据库名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param savePath 文件保存的路径 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param fsFiles  fs.files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 以“,”分割的文件名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static Map<String, StringBuffer> downFileList(String dbName, String savePath, List<GridFSDBFile> fsFiles) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer stringBuffer = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String, String> fileNames = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ByteArrayOutputStream out = new ByteArrayOutputStream(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (fsFiles != null && fsFiles.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (GridFSDBFile fsFile : fsFiles) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                Object objectId = fsFile.getId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String fileType = fsFile.getFilename().substring(fsFile.getFilename().lastIndexOf(".")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String newName = UUID.randomUUID().toString() + "." + fileType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                GridFSDBFile gridFSDBFile = gridFsOperations.findOne(Query.query(GridFsCriteria.where("_id").is(objectId))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    gridFSDBFile.writeTo(out); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    boolean success = FileUtil.writeFile(savePath + "/" + newName, out.toByteArray(), "utf-8"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (!success) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    String type = getMimeType(out.toByteArray()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    fileNames.put(newName, type); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (out != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            out.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return groupDataMap(fileNames); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 删除 mongodb-GridFS文件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param dbName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param objectId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static void deleteFile(String dbName, ObjectId objectId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        gridFsOperations.delete(Query.query(GridFsCriteria.where("_id").is(objectId))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 查询fs.files 数据 in GridFS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param filters 查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return files集合 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static List<GridFSDBFile> findFiles( Map<String, Object> filters) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Query query = new Query(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (filters != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            filters.forEach((key, value) -> query.addCriteria(GridFsCriteria.where(key).is(value))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return gridFsOperations.find(query); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 根据ObjectID集合查询GridFS 文件列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param dbName 数据库名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param ids    objectId集合 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static List<GridFSDBFile> findFsFiles(String dbName, List<ObjectId> ids) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<GridFSDBFile> list = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ids.forEach(objectId -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            GridFSDBFile gridFSDBFile = gridFsOperations.findOne(Query.query(GridFsCriteria.where("_id").is(objectId))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            list.add(gridFSDBFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /*************************************** MineType 工具类 *********************************/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 获取文件Mine-Type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static String getMimeType(File file) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Collection<?> collection = MimeUtil.getMimeTypes(file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return collection.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static String getMimeType(byte[] bytes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Collection<?> collection = MimeUtil.getMimeTypes(bytes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return collection.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 非结构化档案--文件类型map生成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static Map<String, StringBuffer> groupDataMap(Map<String, String> map) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String, StringBuffer> result = new HashMap<String, StringBuffer>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Iterator<String> rs = map.keySet().iterator(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        while (rs.hasNext()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String key = rs.next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String value = map.get(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (result.containsKey(value)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                result.get(value).append(",").append(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                result.put(value, new StringBuffer(key)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     *  上传文件至Mongodb by GridFS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param saveFileName  保存到mongo的文件名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param inputStream   文件流 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param params         metaData数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static String uploadFile( InputStream inputStream,String saveFileName,Map<String ,Object> params) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //metaData参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Document metaDocument = new Document(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (params != null && params.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (Map.Entry<String, Object> entry : params.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String key = entry.getKey(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                metaDocument.append(key, entry.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            gridFsOperations.delete(Query.query(GridFsCriteria.where("filename").is(saveFileName)));//删除原来的文件,保证唯一 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            com.mongodb.gridfs.GridFSFile gridFSFile = gridFsOperations.store(inputStream, saveFileName, "", metaDocument); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (gridFSFile != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return saveFileName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }catch (Exception e){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (inputStream != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    inputStream.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 据文件名返回文件,只返回第一个 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param fileName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static boolean readFile(MongoDatabase db, OutputStream os, String fileName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            GridFSBucket gridFS = GridFSBuckets.create(db); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            gridFS.downloadToStreamByName(fileName, os); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            os.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 读取文件内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param fileName 文件名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static String readFileContent( String fileName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            GridFSDBFile gridFSDBFile = gridFsOperations.findOne(Query.query(GridFsCriteria.where("filename").is(fileName))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            gridFSDBFile.writeTo(byteArrayOutputStream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return byteArrayOutputStream.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 从 mongodb GridFS 下载文件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param savePath 文件保存路径 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param fileName GridFS文件名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static String downFile( String savePath, String fileName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        FileOutputStream fileOutputStream = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            File file = new File(savePath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            fileOutputStream = new FileOutputStream(file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            List<GridFSDBFile> gridFSDBFiles = gridFsOperations.find(Query.query(GridFsCriteria.where("filename").is(fileName))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (gridFSDBFiles==null || gridFSDBFiles.isEmpty()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                GridFSDBFile gridFSDBFile = gridFSDBFiles.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                gridFSDBFile.writeTo(fileOutputStream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return savePath; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (fileOutputStream != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    fileOutputStream.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static boolean deleteFile(String fileName){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            gridFsOperations.delete(Query.query(GridFsCriteria.where("filename").is(fileName)));//删除原来的文件,保证唯一 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }catch (Exception e){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |