@Transactional("blTransactionManagerAssetStorageInfo")
  @Override
  public void createStaticAssetStorageFromFile(MultipartFile file, StaticAsset staticAsset)
      throws IOException {
    if (StorageType.DATABASE.equals(staticAsset.getStorageType())) {
      StaticAssetStorage storage = staticAssetStorageDao.create();
      storage.setStaticAssetId(staticAsset.getId());
      Blob uploadBlob = staticAssetStorageDao.createBlob(file);
      storage.setFileData(uploadBlob);
      staticAssetStorageDao.save(storage);
    } else if (StorageType.FILESYSTEM.equals(staticAsset.getStorageType())) {
      FileWorkArea tempWorkArea = broadleafFileService.initializeWorkArea();
      String destFileName =
          tempWorkArea.getFilePathLocation() + removeLeadingSlash(staticAsset.getFullUrl());

      InputStream input = file.getInputStream();
      byte[] buffer = new byte[fileBufferSize];

      File destFile = new File(destFileName);
      if (!destFile.getParentFile().exists()) {
        if (!destFile.getParentFile().mkdirs()) {
          throw new RuntimeException(
              "Unable to create parent directories for file: " + destFileName);
        }
      }

      OutputStream output = new FileOutputStream(destFile);
      boolean deleteFile = false;
      try {
        int bytesRead;
        int totalBytesRead = 0;
        while ((bytesRead = input.read(buffer)) != -1) {
          totalBytesRead += bytesRead;
          if (totalBytesRead > maxUploadableFileSize) {
            deleteFile = true;
            throw new IOException("Maximum Upload File Size Exceeded");
          }
          output.write(buffer, 0, bytesRead);
        }

        broadleafFileService.addOrUpdateResource(tempWorkArea, destFile, true);
      } finally {
        output.close();
        broadleafFileService.closeWorkArea(tempWorkArea);
      }
    }
  }
  protected void createLocalFileFromInputStream(InputStream is, File baseLocalFile)
      throws IOException {
    BufferedOutputStream bos = null;
    FileWorkArea workArea = null;
    try {
      if (!baseLocalFile.getParentFile().exists()) {
        if (!baseLocalFile.getParentFile().mkdirs()) {
          throw new RuntimeException(
              "Unable to create middle directories for file: " + baseLocalFile.getAbsolutePath());
        }
      }

      workArea = broadleafFileService.initializeWorkArea();
      File tmpFile =
          new File(appendTrailingSlash(workArea.getFilePathLocation()) + baseLocalFile.getName());

      bos = new BufferedOutputStream(new FileOutputStream(tmpFile));

      boolean eof = false;
      int temp;
      while (!eof) {
        temp = is.read();
        if (temp < 0) {
          eof = true;
        } else {
          bos.write(temp);
        }
      }

      FileUtils.moveFile(tmpFile, baseLocalFile);
    } finally {
      try {
        if (bos != null) {
          bos.flush();
          bos.close();
        }
        if (workArea != null) {
          broadleafFileService.closeWorkArea(workArea);
        }
      } catch (Throwable e) {
        // do nothing
      }
    }
  }