Prepare FileSystemContentRepository for code re-use with S3ContentRepository (FINERACT-1201)
This commit is contained in:
committed by
Petri Tuomola
parent
0146f518bc
commit
2af09708f1
+21
-45
@@ -18,12 +18,13 @@
|
||||
*/
|
||||
package org.apache.fineract.infrastructure.documentmanagement.contentrepository;
|
||||
|
||||
import com.google.common.io.Files;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Base64;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.fineract.infrastructure.core.domain.Base64EncodedImage;
|
||||
import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
|
||||
import org.apache.fineract.infrastructure.documentmanagement.command.DocumentCommand;
|
||||
@@ -44,13 +45,10 @@ public class FileSystemContentRepository implements ContentRepository {
|
||||
@Override
|
||||
public String saveFile(final InputStream uploadedInputStream, final DocumentCommand documentCommand) {
|
||||
final String fileName = documentCommand.getFileName();
|
||||
final String uploadDocumentLocation = generateFileParentDirectory(documentCommand.getParentEntityType(),
|
||||
documentCommand.getParentEntityId());
|
||||
|
||||
ContentRepositoryUtils.validateFileSizeWithinPermissibleRange(documentCommand.getSize(), fileName);
|
||||
makeDirectories(uploadDocumentLocation);
|
||||
|
||||
final String fileLocation = uploadDocumentLocation + File.separator + fileName;
|
||||
final String fileLocation = generateFileParentDirectory(documentCommand.getParentEntityType(), documentCommand.getParentEntityId())
|
||||
+ File.separator + fileName;
|
||||
|
||||
writeFileToFileSystem(fileName, uploadedInputStream, fileLocation);
|
||||
return fileLocation;
|
||||
@@ -58,38 +56,25 @@ public class FileSystemContentRepository implements ContentRepository {
|
||||
|
||||
@Override
|
||||
public String saveImage(final InputStream uploadedInputStream, final Long resourceId, final String imageName, final Long fileSize) {
|
||||
final String uploadImageLocation = generateClientImageParentDirectory(resourceId);
|
||||
|
||||
ContentRepositoryUtils.validateFileSizeWithinPermissibleRange(fileSize, imageName);
|
||||
makeDirectories(uploadImageLocation);
|
||||
|
||||
final String fileLocation = uploadImageLocation + File.separator + imageName;
|
||||
|
||||
final String fileLocation = generateClientImageParentDirectory(resourceId) + File.separator + imageName;
|
||||
writeFileToFileSystem(imageName, uploadedInputStream, fileLocation);
|
||||
return fileLocation;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String saveImage(final Base64EncodedImage base64EncodedImage, final Long resourceId, final String imageName) {
|
||||
final String uploadImageLocation = generateClientImageParentDirectory(resourceId);
|
||||
|
||||
makeDirectories(uploadImageLocation);
|
||||
|
||||
final String fileLocation = uploadImageLocation + File.separator + imageName + base64EncodedImage.getFileExtension();
|
||||
final String base64EncodedImageString = base64EncodedImage.getBase64EncodedString();
|
||||
final String fileLocation = generateClientImageParentDirectory(resourceId) + File.separator + imageName
|
||||
+ base64EncodedImage.getFileExtension();
|
||||
String base64EncodedImageString = base64EncodedImage.getBase64EncodedString();
|
||||
try {
|
||||
final OutputStream out = new FileOutputStream(new File(fileLocation));
|
||||
final byte[] imgBytes = Base64.getMimeDecoder().decode(base64EncodedImageString);
|
||||
out.write(imgBytes);
|
||||
out.flush();
|
||||
out.close();
|
||||
} catch (final IOException ioe) {
|
||||
throw new ContentManagementException(imageName, ioe.getMessage(), ioe);
|
||||
final InputStream toUploadInputStream = new ByteArrayInputStream(Base64.getMimeDecoder().decode(base64EncodedImageString));
|
||||
writeFileToFileSystem(imageName, toUploadInputStream, fileLocation);
|
||||
return fileLocation;
|
||||
} catch (IllegalArgumentException iae) {
|
||||
LOG.error("IllegalArgumentException due to invalid Base64 encoding: {}", base64EncodedImageString, iae);
|
||||
throw iae;
|
||||
}
|
||||
return fileLocation;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -114,11 +99,6 @@ public class FileSystemContentRepository implements ContentRepository {
|
||||
return fileToBeDeleted.delete();
|
||||
}
|
||||
|
||||
@Override
|
||||
public StorageType getStorageType() {
|
||||
return StorageType.FILE_SYSTEM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FileData fetchFile(final DocumentData documentData) {
|
||||
final File file = new File(documentData.fileLocation());
|
||||
@@ -132,6 +112,11 @@ public class FileSystemContentRepository implements ContentRepository {
|
||||
return imageData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public StorageType getStorageType() {
|
||||
return StorageType.FILE_SYSTEM;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the directory path for storing the new document
|
||||
*/
|
||||
@@ -153,23 +138,14 @@ public class FileSystemContentRepository implements ContentRepository {
|
||||
/**
|
||||
* Recursively create the directory if it does not exist.
|
||||
*/
|
||||
private void makeDirectories(final String uploadDocumentLocation) {
|
||||
if (!new File(uploadDocumentLocation).isDirectory()) {
|
||||
new File(uploadDocumentLocation).mkdirs();
|
||||
}
|
||||
private void makeDirectories(final String uploadDocumentLocation) throws IOException {
|
||||
Files.createParentDirs(new File(uploadDocumentLocation));
|
||||
}
|
||||
|
||||
private void writeFileToFileSystem(final String fileName, final InputStream uploadedInputStream, final String fileLocation) {
|
||||
try {
|
||||
final OutputStream out = new FileOutputStream(new File(fileLocation));
|
||||
int read = 0;
|
||||
final byte[] bytes = new byte[1024];
|
||||
|
||||
while ((read = uploadedInputStream.read(bytes)) != -1) {
|
||||
out.write(bytes, 0, read);
|
||||
}
|
||||
out.flush();
|
||||
out.close();
|
||||
makeDirectories(fileLocation);
|
||||
FileUtils.copyInputStreamToFile(uploadedInputStream, new File(fileLocation));
|
||||
} catch (final IOException ioException) {
|
||||
LOG.warn("writeFileToFileSystem() IOException (logged because cause is not propagated in ContentManagementException)",
|
||||
ioException);
|
||||
|
||||
Reference in New Issue
Block a user