private String uploadImg(UploadFile uploadFile) {
    String outputPath = "";
    try {
      Calendar calendar = Calendar.getInstance();
      outputPath =
          ServerConfig.get("file_save_path")
              + File.separator
              + calendar.get(Calendar.YEAR)
              + File.separator
              + calendar.get(Calendar.MONTH)
              + File.separator
              + calendar.get(Calendar.DAY_OF_MONTH)
              + File.separator
              + calendar.get(Calendar.HOUR_OF_DAY)
              + File.separator;
      File file = new File(ServerConfig.get("real_root_path") + outputPath);
      file.mkdirs();
      log.info(file.toString());
    } catch (Exception e) {
      log.error("can't create output path");
      throw new ServiceException("file.upload.failed");
    }

    if (uploadFile.validate()) {
      String filePath = "";
      String fileName = uploadFile.getFileName() + "_" + System.currentTimeMillis();
      try {
        uploadFile.upload(ServerConfig.get("real_root_path") + outputPath, fileName);
      } catch (IOException e) {
        log.error("UploadFile upload excute error");
        throw new ServiceException("file.upload.failed");
      }
      filePath = outputPath + fileName;
      return filePath;
    } else {
      log.error("uploadFile validate failed");
      throw new ServiceException("file.upload.failed");
    }
  }
  private void storeImg(String url) {
    // 计算文件名前缀
    String fileNamePrefix =
        url.substring(0, url.length() - 3)
            .replaceAll("http://", "")
            .replaceAll("\\.", "")
            .replaceAll("/", "");
    // 计算上传路径
    String outputPath = "";
    try {
      Calendar calendar = Calendar.getInstance();
      outputPath =
          ServerConfig.get("file_save_path")
              + File.separator
              + calendar.get(Calendar.YEAR)
              + File.separator
              + calendar.get(Calendar.MONTH)
              + File.separator
              + calendar.get(Calendar.DAY_OF_MONTH)
              + File.separator
              + calendar.get(Calendar.HOUR_OF_DAY)
              + File.separator;
      File file = new File(ServerConfig.get("real_root_path") + outputPath);
      file.mkdirs();
      log.info(file.toString());
    } catch (Exception e) {
      log.error("can't create output path");
      return;
    }

    try {
      String filePath = ServerConfig.get("real_root_path") + outputPath + fileNamePrefix;

      BufferedImage originalImage = ImageIO.read(new URL(url));
      // set image file storage path
      // TODO
      ImageIO.write(originalImage, "jpg", new File(filePath + ".jpg"));
      // start to scale the image
      ImageResizer imageResizer = new ImageResizer();
      imageResizer.setWidth(110);
      imageResizer.setHeight((int) (110 * originalImage.getHeight() / originalImage.getWidth()));
      imageResizer.setOriginalImage(originalImage);
      imageResizer.execute();
      BufferedImage resizedImage = imageResizer.getResizedImage();
      ImageIO.write(resizedImage, "jpg", new File(filePath + "0.jpg"));

      // imageResizer = new ImageResizer();
      imageResizer.setWidth(210);
      imageResizer.setHeight((int) (210 * originalImage.getHeight() / originalImage.getWidth()));
      imageResizer.setOriginalImage(originalImage);
      imageResizer.execute();
      resizedImage = imageResizer.getResizedImage();
      ImageIO.write(resizedImage, "jpg", new File(filePath + "1.jpg"));

      // key step
      AppboxImg appboxImg = new AppboxImg();
      appboxImg.setImgUrl(url);
      appboxImg.setOriginPath(outputPath + fileNamePrefix + ".jpg");
      appboxImg.setTinyPath(outputPath + fileNamePrefix + "0.jpg");
      appboxImg.setMiddlePath(outputPath + fileNamePrefix + "1.jpg");

      appboxImgDao.save(appboxImg);
    } catch (IOException e) {
      log.error("fetch image file failed");
      return;
    }

    return;
  }