package com.zdcf.service.Impl; import java.io.File; import java.io.IOException; import java.io.Serializable; import java.nio.charset.Charset; import java.util.Date; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.FilenameUtils; import org.apache.log4j.Logger; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import com.facepp.error.FaceppParseException; import com.facepp.http.HttpRequests; import com.facepp.http.PostParameters; import com.zdcf.base.Constants; import com.zdcf.dto.FaceAttributeDTO; import com.zdcf.dto.FaceDTO; import com.zdcf.dto.FileDTO; import com.zdcf.mapper.FileMapper; import com.zdcf.model.FileExchange; import com.zdcf.model.Files; import com.zdcf.model.Images; import com.zdcf.model.Movie; import com.zdcf.service.FileService; import com.zdcf.tool.DateUtil; import com.zdcf.tool.PageVo; import com.zdcf.tool.StringUtil; @Service @Transactional public class FileServiceImpl implements FileService { @Autowired private FileMapper fileMapper; @Autowired RedisCacheService redisCacheService; @Autowired private HttpServletRequest request; private static Logger logger = Logger.getLogger(FileServiceImpl.class); @Override public int addFile(Files file) { return fileMapper.addFile(file); } @Override public int addFileExchange(FileExchange file) { fileMapper.addFileExchange(file); FileExchange fileExchange = fileMapper.getFileExchangeByOldUrl(file.getOldUrl()); redisCacheService.process(fileExchange, Constants.Cache.Type.save); return 1; } @Override public int addImage(Images image) { return fileMapper.addImage(image); } @Override public Integer addFace(FaceDTO face) { return fileMapper.addFace(face); } @Override public String saveImage(MultipartFile file,String path) { if(file == null || file.getSize() <= 0){ return null; } String origFileName = file.getOriginalFilename(); String ext = FilenameUtils.getExtension(origFileName); String destPath = getImagePath(ext); String saveFileName = destPath + "." + ext; saveFile(file, saveFileName,path); //小图 /*String iconFileName = destPath + "_0." + ext; String base = this.getImageSavePath() + File.separator; //ImageUtil.zoomImg(base + saveFileName, base + iconFileName, ext.toUpperCase()); */ return saveFileName; } private String getImagePath(String ext){ Date now = new Date(); String yym = DateUtil.dateToStr(now, "yyMM"); /*String saveFileName = "images" + File.separator + yym + File.separator + now.getDate() + File.separator + now.getHours() + File.separator + now.getMinutes() + File.separator + System.currentTimeMillis();*/ String saveFileName = "images" + "/" + yym + "/" + now.getDate() + "/" + now.getHours() + "/" + now.getMinutes() + "/" + System.currentTimeMillis(); return saveFileName; } public void saveFile(MultipartFile file, String destPath,String savePath){ try { logger.debug("saving file for: " + destPath + ", file name is: " + file.getOriginalFilename()); File destFile = new File(savePath + File.separator + destPath); logger.debug(destFile.getAbsolutePath()); if (!(destFile.getParentFile().exists())) { destFile.mkdirs(); } file.transferTo(destFile); logger.debug("saving file succeed for: " + destPath + ", file name is: " + file.getOriginalFilename()); } catch (IOException ioe) { logger.error("error uploading file for: " + destPath + ", file name is: " + file.getOriginalFilename()); logger.error(ioe); throw new RuntimeException("文件保存失败"); } } @Override public List<FileDTO> fileList() { return fileMapper.fileList(); } @Override public List<FaceAttributeDTO> getFaceAttr(int faceId) { return fileMapper.getFaceAttr(faceId); } @Override public FileDTO getFileDetail(int id) { return fileMapper.getFileById(id); } @Override public Serializable getFileListPage( PageVo<Map<String, Object>> pageVo2) { PageVo<Map<String, Object>> pageVo = (PageVo<Map<String, Object>>) pageVo2; int offset = pageVo.getCurrentPage() - 1; if (offset < 0) offset = 0; List<Map<String, Object>> commonNewsList = fileMapper .getFileListPage( offset * pageVo.getPageSize(), pageVo.getPageSize()); int count = fileMapper.getFileCount(offset* pageVo.getPageSize(), pageVo.getPageSize()); pageVo.setVoList(commonNewsList); pageVo.setRecordCount(count); return pageVo; } @Override public Serializable getImageListPage( PageVo<Map<String, Object>> pageVo2) { PageVo<Map<String, Object>> pageVo = (PageVo<Map<String, Object>>) pageVo2; int offset = pageVo.getCurrentPage() - 1; if (offset < 0) offset = 0; List<Map<String, Object>> commonNewsList = fileMapper .getImageListPage( offset * pageVo.getPageSize(), pageVo.getPageSize()); int count = fileMapper.getImageCount(offset* pageVo.getPageSize(), pageVo.getPageSize()); pageVo.setVoList(commonNewsList); pageVo.setRecordCount(count); return pageVo; } @Override public Serializable getFaceListPage( PageVo<Map<String, Object>> pageVo2) { PageVo<Map<String, Object>> pageVo = (PageVo<Map<String, Object>>) pageVo2; int offset = pageVo.getCurrentPage() - 1; if (offset < 0) offset = 0; List<Map<String, Object>> commonNewsList = fileMapper .getFaceListPage( offset * pageVo.getPageSize(), pageVo.getPageSize()); //put people attributes for (Map<String, Object> map : commonNewsList) { List<FaceAttributeDTO> faceAttr = fileMapper.getFaceAttr(StringUtil.ObjectToIntegerUtil(map.get("id"))); map.put("faceAttr", faceAttr); } int count = fileMapper.getFaceCount(offset* pageVo.getPageSize(), pageVo.getPageSize()); pageVo.setVoList(commonNewsList); pageVo.setRecordCount(count); return pageVo; } @Override public Integer addFaceAttribute(FaceDTO faceDTO){ HttpRequests httpRequests = new HttpRequests("dd0094b405bf9612a58f181ee3acde3a", "fcmx4kqd0fZzOzQKOFiYcldgE92ECNLx", true, true); JSONObject result = null; try { System.out.println(Charset.forName("UTF-8").name()); PostParameters params = new PostParameters(); params.setAttribute("glass,pose,gender,age,race,smiling"); params.setUrl(faceDTO.getUrl()); result = httpRequests.detectionDetect(params); System.out.println(result); Integer size = result.getJSONArray("face").length(); if(null!=size&&size>0){ for(int i=0;i<size;i++){ FaceAttributeDTO attr = new FaceAttributeDTO(); JSONObject attribute = result.getJSONArray("face").getJSONObject(i).getJSONObject("attribute"); attr.setAge(Integer.parseInt(attribute.getJSONObject("age").get("value").toString())); attr.setGender(attribute.getJSONObject("gender").get("value").toString()); attr.setGlass(attribute.getJSONObject("glass").get("value").toString()); attr.setRace(attribute.getJSONObject("race").get("value").toString()); attr.setFace_id(faceDTO.getId()); fileMapper.addFaceAttribute(attr); } } } catch(FaceppParseException e) { e.printStackTrace(); } catch (Exception e) { } return 0; } @Override public FaceDTO getFace(String url) { return fileMapper.getFace(url); } @Override public FaceDTO getFaceById(int id) { return fileMapper.getFaceById(id); } @Override public FileExchange getFileExchange(String url){ //查询redis和数据库是否有此文件 FileExchange temp = new FileExchange(); temp.setOldUrl(url); FileExchange fileExchange = redisCacheService.get(temp.getCacheKey(), FileExchange.class); //不在缓存中,去数据库中查询 if(fileExchange == null){ fileExchange = fileMapper.getFileExchangeByOldUrl(url); if(fileExchange !=null){ File tempFile = new File(request.getSession().getServletContext().getRealPath("/")+"uploadfile/"+fileExchange.getNewUrl()); if(tempFile.exists()){ redisCacheService.process(fileExchange, Constants.Cache.Type.save); }else{ fileMapper.deleteFileExchangeByOldUrl(url); fileExchange =null ; } } }else{ File file = new File(request.getSession().getServletContext().getRealPath("/")+"uploadfile/"+fileExchange.getNewUrl()); if(!file.exists()){ redisCacheService.del(temp.getCacheKey()); fileExchange =null ; } } return fileExchange; } }