package org.mifos.framework.fileupload.service; import java.io.File; import java.io.IOException; import java.io.InputStream; import org.apache.commons.io.FileUtils; import org.mifos.dto.screen.UploadedFileDto; import org.mifos.framework.fileupload.domain.FileInfoEntity; import org.mifos.framework.util.ConfigurationLocator; import org.mifos.framework.util.helpers.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.mchange.v1.io.InputStreamUtils; public class FileStorageManager { private static final Logger logger = LoggerFactory.getLogger(FileStorageManager.class); private static final String BASE_DIR = "/uploads/"; public static String location; public static FileInfoEntity createFile(InputStream in, String fileDir, UploadedFileDto uploadedFileDto) throws IOException { byte[] data = InputStreamUtils.getBytes(in); File file = new File(fileDir + File.separator + uploadedFileDto.getName()); FileUtils.touch(file); FileUtils.writeByteArrayToFile(file, data); FileInfoEntity fileInfo = new FileInfoEntity(); fileInfo.setName(uploadedFileDto.getName()); fileInfo.setContentType(uploadedFileDto.getContentType()); fileInfo.setSize(data.length); fileInfo.setDescription(uploadedFileDto.getDescription()); fileInfo.setUploadDate(DateUtils.getCurrentJavaDateTime()); return fileInfo; } public static FileInfoEntity updateFile(InputStream in, String fileDir, FileInfoEntity fileInfo, UploadedFileDto uploadedFileDto) throws IOException { String filePath = fileDir + File.separator + fileInfo.getName(); byte[] data = InputStreamUtils.getBytes(in); File file = new File(filePath); FileUtils.touch(file); FileUtils.writeByteArrayToFile(file, data); fileInfo.setContentType(uploadedFileDto.getContentType()); fileInfo.setName(uploadedFileDto.getName()); fileInfo.setDescription(uploadedFileDto.getDescription()); fileInfo.setSize(data.length); fileInfo.setUploadDate(DateUtils.getCurrentJavaDateTime()); return fileInfo; } public static byte[] getData(String path) { byte[] data = null; try { File file = new File(path); data = FileUtils.readFileToByteArray(file); } catch (IOException e) { logger.error("Error reading file " + path, e); } return data; } public static boolean delete(String path) { return FileUtils.deleteQuietly(new File(path)); } public static void initStorage() { getStorageLocation(); } public static synchronized String getStorageLocation() { if (location == null) { ConfigurationLocator cl = new ConfigurationLocator(); location = cl.getConfigurationDirectory() + BASE_DIR; checkStoragePermission(); } return location; } private static void checkStoragePermission() { try { File file = new File(location + "/permissionCheck"); FileUtils.touch(file); FileUtils.writeStringToFile(file, "This is test"); FileUtils.deleteQuietly(file); } catch (IOException e) { throw new IllegalStateException(e); } } }