mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 02:07:42 +00:00
Merge pull request #2705 from dgrove727/2446_ImageExtractorExceptionHandling
New catch blocks added to silently catch/return on errors.
This commit is contained in:
commit
2fe53c33c7
@ -31,7 +31,6 @@ EmbeddedFileExtractorIngestModule.ImageExtractor.pptContainer.init.err=Ppt conta
|
||||
EmbeddedFileExtractorIngestModule.ImageExtractor.pptxContainer.init.err=Pptx container could not be initialized while reading: {0}
|
||||
EmbeddedFileExtractorIngestModule.ImageExtractor.xlsContainer.init.err=Xls container could not be initialized while reading: {0}
|
||||
EmbeddedFileExtractorIngestModule.ImageExtractor.xlsxContainer.init.err=Xlsx container could not be initialized while reading: {0}
|
||||
EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err=Embedded File Extractor is unable to read content of {0}
|
||||
EmbeddedFileExtractorIngestModule.ImageExtractor.extractImage.addToDB.exception.msg=Unable to add the derived files to the database.
|
||||
EmbeddedFileExtractorIngestModule.ImageExtractor.getOutputFolderPath.exception.msg=Could not get path for image extraction from Abstract File\: {0}
|
||||
EmbeddedFileExtractorIngestModule.ImageExtractor.getOutputFolderPath.exception.msg=Could not get path for image extraction from Abstract File: {0}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Autopsy Forensic Browser
|
||||
*
|
||||
* Copyright 2011-2015 Basis Technology Corp.
|
||||
* Copyright 2011-2017 Basis Technology Corp.
|
||||
* Contact: carrier <at> sleuthkit <dot> org
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -25,6 +25,8 @@ import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import org.apache.poi.OldFileFormatException;
|
||||
import org.apache.poi.POIXMLException;
|
||||
import org.apache.poi.hslf.model.Picture;
|
||||
import org.apache.poi.hslf.usermodel.PictureData;
|
||||
import org.apache.poi.hslf.usermodel.SlideShow;
|
||||
@ -120,7 +122,7 @@ class ImageExtractor {
|
||||
}
|
||||
return false;
|
||||
} catch (TskCoreException ex) {
|
||||
logger.log(Level.WARNING, "Error executing FileTypeDetector.getFileType()", ex); // NON-NLS
|
||||
logger.log(Level.SEVERE, "Error executing FileTypeDetector.getFileType()", ex); // NON-NLS
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -152,7 +154,7 @@ class ImageExtractor {
|
||||
}
|
||||
}
|
||||
} catch (TskCoreException e) {
|
||||
logger.log(Level.WARNING, String.format("Error checking if file already has been processed, skipping: %s", parentFileName), e); //NON-NLS
|
||||
logger.log(Level.SEVERE, String.format("Error checking if file already has been processed, skipping: %s", parentFileName), e); //NON-NLS
|
||||
return;
|
||||
}
|
||||
switch (abstractFileExtractionFormat) {
|
||||
@ -189,7 +191,7 @@ class ImageExtractor {
|
||||
extractedImage.getCtime(), extractedImage.getCrtime(), extractedImage.getAtime(), extractedImage.getAtime(),
|
||||
true, abstractFile, null, EmbeddedFileExtractorModuleFactory.getModuleName(), null, null, TskData.EncodingType.XOR1));
|
||||
} catch (TskCoreException ex) {
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.extractImage.addToDB.exception.msg"), ex); //NON-NLS
|
||||
logger.log(Level.SEVERE, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.extractImage.addToDB.exception.msg"), ex); //NON-NLS
|
||||
}
|
||||
}
|
||||
if (!listOfExtractedImages.isEmpty()) {
|
||||
@ -207,24 +209,24 @@ class ImageExtractor {
|
||||
* extracted.
|
||||
*/
|
||||
private List<ExtractedImage> extractImagesFromDoc(AbstractFile af) {
|
||||
List<ExtractedImage> listOfExtractedImages;
|
||||
HWPFDocument doc = null;
|
||||
List<org.apache.poi.hwpf.usermodel.Picture> listOfAllPictures;
|
||||
|
||||
try {
|
||||
doc = new HWPFDocument(new ReadContentInputStream(af));
|
||||
HWPFDocument doc = new HWPFDocument(new ReadContentInputStream(af));
|
||||
PicturesTable pictureTable = doc.getPicturesTable();
|
||||
listOfAllPictures = pictureTable.getAllPictures();
|
||||
} catch (OldFileFormatException | IOException ex) {
|
||||
// OldFileFormatException:
|
||||
// Thrown when the document version is unsupported (Word 95 and
|
||||
// older)
|
||||
|
||||
// IOException:
|
||||
// Thrown when the document has issues being read.
|
||||
|
||||
return null;
|
||||
} catch (Throwable ex) {
|
||||
// instantiating POI containers throw RuntimeExceptions
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.docContainer.init.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
PicturesTable pictureTable = null;
|
||||
List<org.apache.poi.hwpf.usermodel.Picture> listOfAllPictures = null;
|
||||
try {
|
||||
pictureTable = doc.getPicturesTable();
|
||||
listOfAllPictures = pictureTable.getAllPictures();
|
||||
} catch (Exception ex) {
|
||||
// log internal Java and Apache errors as WARNING
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName()), ex); //NON-NLS
|
||||
logger.log(Level.SEVERE, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.docContainer.init.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -237,15 +239,13 @@ class ImageExtractor {
|
||||
if (outputFolderPath == null) {
|
||||
return null;
|
||||
}
|
||||
listOfExtractedImages = new ArrayList<>();
|
||||
List<ExtractedImage> listOfExtractedImages = new ArrayList<>();
|
||||
byte[] data = null;
|
||||
for (org.apache.poi.hwpf.usermodel.Picture picture : listOfAllPictures) {
|
||||
String fileName = picture.suggestFullFileName();
|
||||
try {
|
||||
data = picture.getContent();
|
||||
} catch (Exception ex) {
|
||||
// log internal Java and Apache errors as WARNING
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
writeExtractedImage(Paths.get(outputFolderPath, fileName).toString(), data);
|
||||
@ -265,21 +265,22 @@ class ImageExtractor {
|
||||
* extracted.
|
||||
*/
|
||||
private List<ExtractedImage> extractImagesFromDocx(AbstractFile af) {
|
||||
List<ExtractedImage> listOfExtractedImages;
|
||||
XWPFDocument docx = null;
|
||||
List<XWPFPictureData> listOfAllPictures = null;
|
||||
|
||||
try {
|
||||
docx = new XWPFDocument(new ReadContentInputStream(af));
|
||||
XWPFDocument docx = new XWPFDocument(new ReadContentInputStream(af));
|
||||
listOfAllPictures = docx.getAllPictures();
|
||||
} catch (POIXMLException | IOException ex) {
|
||||
// POIXMLException:
|
||||
// Thrown when document fails to load
|
||||
|
||||
// IOException:
|
||||
// Thrown when the document has issues being read.
|
||||
|
||||
return null;
|
||||
} catch (Throwable ex) {
|
||||
// instantiating POI containers throw RuntimeExceptions
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.docxContainer.init.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
List<XWPFPictureData> listOfAllPictures = null;
|
||||
try {
|
||||
listOfAllPictures = docx.getAllPictures();
|
||||
} catch (Exception ex) {
|
||||
// log internal Java and Apache errors as WARNING
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName()), ex); //NON-NLS
|
||||
logger.log(Level.SEVERE, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.docxContainer.init.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -292,18 +293,15 @@ class ImageExtractor {
|
||||
outputFolderPath = getOutputFolderPath(this.parentFileName);
|
||||
}
|
||||
if (outputFolderPath == null) {
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.extractImageFrom.outputPath.exception.msg", af.getName())); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
listOfExtractedImages = new ArrayList<>();
|
||||
List<ExtractedImage> listOfExtractedImages = new ArrayList<>();
|
||||
byte[] data = null;
|
||||
for (XWPFPictureData xwpfPicture : listOfAllPictures) {
|
||||
String fileName = xwpfPicture.getFileName();
|
||||
try {
|
||||
data = xwpfPicture.getData();
|
||||
} catch (Exception ex) {
|
||||
// log internal Java and Apache errors as WARNING
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
writeExtractedImage(Paths.get(outputFolderPath, fileName).toString(), data);
|
||||
@ -321,23 +319,22 @@ class ImageExtractor {
|
||||
* extracted.
|
||||
*/
|
||||
private List<ExtractedImage> extractImagesFromPpt(AbstractFile af) {
|
||||
List<ExtractedImage> listOfExtractedImages;
|
||||
SlideShow ppt = null;
|
||||
PictureData[] listOfAllPictures = null;
|
||||
|
||||
try {
|
||||
ppt = new SlideShow(new ReadContentInputStream(af));
|
||||
SlideShow ppt = new SlideShow(new ReadContentInputStream(af));
|
||||
listOfAllPictures = ppt.getPictureData();
|
||||
} catch (OldFileFormatException | IOException ex) {
|
||||
// OldFileFormatException:
|
||||
// Thrown when the document version is unsupported
|
||||
|
||||
// IOException:
|
||||
// Thrown when the document has issues being read
|
||||
|
||||
return null;
|
||||
} catch (Throwable ex) {
|
||||
// instantiating POI containers throw RuntimeExceptions
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.pptContainer.init.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
//extract all pictures contained in the presentation
|
||||
PictureData[] listOfAllPictures = null;
|
||||
try {
|
||||
listOfAllPictures = ppt.getPictureData();
|
||||
} catch (Exception ex) {
|
||||
// log internal Java and Apache errors as WARNING
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName()), ex); //NON-NLS
|
||||
logger.log(Level.SEVERE, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.pptContainer.init.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -350,14 +347,13 @@ class ImageExtractor {
|
||||
outputFolderPath = getOutputFolderPath(this.parentFileName);
|
||||
}
|
||||
if (outputFolderPath == null) {
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.extractImageFrom.outputPath.exception.msg", af.getName())); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
// extract the images to the above initialized outputFolder.
|
||||
// extraction path - outputFolder/image_number.ext
|
||||
int i = 0;
|
||||
listOfExtractedImages = new ArrayList<>();
|
||||
List<ExtractedImage> listOfExtractedImages = new ArrayList<>();
|
||||
byte[] data = null;
|
||||
for (PictureData pictureData : listOfAllPictures) {
|
||||
|
||||
@ -388,8 +384,6 @@ class ImageExtractor {
|
||||
try {
|
||||
data = pictureData.getData();
|
||||
} catch (Exception ex) {
|
||||
// log internal Java and Apache errors as WARNING
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
writeExtractedImage(Paths.get(outputFolderPath, imageName).toString(), data);
|
||||
@ -408,21 +402,22 @@ class ImageExtractor {
|
||||
* extracted.
|
||||
*/
|
||||
private List<ExtractedImage> extractImagesFromPptx(AbstractFile af) {
|
||||
List<ExtractedImage> listOfExtractedImages;
|
||||
XMLSlideShow pptx;
|
||||
List<XSLFPictureData> listOfAllPictures = null;
|
||||
|
||||
try {
|
||||
pptx = new XMLSlideShow(new ReadContentInputStream(af));
|
||||
XMLSlideShow pptx = new XMLSlideShow(new ReadContentInputStream(af));
|
||||
listOfAllPictures = pptx.getAllPictures();
|
||||
} catch (POIXMLException | IOException ex) {
|
||||
// POIXMLException:
|
||||
// Thrown when document fails to load.
|
||||
|
||||
// IOException:
|
||||
// Thrown when the document has issues being read
|
||||
|
||||
return null;
|
||||
} catch (Throwable ex) {
|
||||
// instantiating POI containers throw RuntimeExceptions
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.pptxContainer.init.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
List<XSLFPictureData> listOfAllPictures = null;
|
||||
try {
|
||||
listOfAllPictures = pptx.getAllPictures();
|
||||
} catch (Exception ex) {
|
||||
// log internal Java and Apache errors as WARNING
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName()), ex); //NON-NLS
|
||||
logger.log(Level.SEVERE, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.pptxContainer.init.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -435,11 +430,10 @@ class ImageExtractor {
|
||||
outputFolderPath = getOutputFolderPath(this.parentFileName);
|
||||
}
|
||||
if (outputFolderPath == null) {
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.extractImageFrom.outputPath.exception.msg", af.getName())); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
listOfExtractedImages = new ArrayList<>();
|
||||
List<ExtractedImage> listOfExtractedImages = new ArrayList<>();
|
||||
byte[] data = null;
|
||||
for (XSLFPictureData xslsPicture : listOfAllPictures) {
|
||||
|
||||
@ -449,8 +443,6 @@ class ImageExtractor {
|
||||
try {
|
||||
data = xslsPicture.getData();
|
||||
} catch (Exception ex) {
|
||||
// log internal Java and Apache errors as WARNING
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
writeExtractedImage(Paths.get(outputFolderPath, fileName).toString(), data);
|
||||
@ -471,23 +463,22 @@ class ImageExtractor {
|
||||
* extracted.
|
||||
*/
|
||||
private List<ExtractedImage> extractImagesFromXls(AbstractFile af) {
|
||||
List<ExtractedImage> listOfExtractedImages;
|
||||
|
||||
Workbook xls;
|
||||
List<? extends org.apache.poi.ss.usermodel.PictureData> listOfAllPictures = null;
|
||||
|
||||
try {
|
||||
xls = new HSSFWorkbook(new ReadContentInputStream(af));
|
||||
Workbook xls = new HSSFWorkbook(new ReadContentInputStream(af));
|
||||
listOfAllPictures = xls.getAllPictures();
|
||||
} catch (OldFileFormatException | IOException ex) {
|
||||
// OldFileFormatException:
|
||||
// Thrown when the document version is unsupported
|
||||
|
||||
// IOException:
|
||||
// Thrown when the document has issues being read
|
||||
|
||||
return null;
|
||||
} catch (Throwable ex) {
|
||||
// instantiating POI containers throw RuntimeExceptions
|
||||
logger.log(Level.WARNING, String.format("%s%s", NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.xlsContainer.init.err", af.getName()), af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
List<? extends org.apache.poi.ss.usermodel.PictureData> listOfAllPictures = null;
|
||||
try {
|
||||
listOfAllPictures = xls.getAllPictures();
|
||||
} catch (Exception ex) {
|
||||
// log internal Java and Apache errors as WARNING
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName()), ex); //NON-NLS
|
||||
logger.log(Level.SEVERE, String.format("%s%s", NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.xlsContainer.init.err", af.getName()), af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -500,20 +491,17 @@ class ImageExtractor {
|
||||
outputFolderPath = getOutputFolderPath(this.parentFileName);
|
||||
}
|
||||
if (outputFolderPath == null) {
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.extractImageFrom.outputPath.exception.msg", af.getName())); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
listOfExtractedImages = new ArrayList<>();
|
||||
List<ExtractedImage> listOfExtractedImages = new ArrayList<>();
|
||||
byte[] data = null;
|
||||
for (org.apache.poi.ss.usermodel.PictureData pictureData : listOfAllPictures) {
|
||||
String imageName = UNKNOWN_NAME_PREFIX + i + "." + pictureData.suggestFileExtension(); //NON-NLS
|
||||
try {
|
||||
data = pictureData.getData();
|
||||
} catch (Exception ex) {
|
||||
// log internal Java and Apache errors as WARNING
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
writeExtractedImage(Paths.get(outputFolderPath, imageName).toString(), data);
|
||||
@ -533,22 +521,22 @@ class ImageExtractor {
|
||||
* extracted.
|
||||
*/
|
||||
private List<ExtractedImage> extractImagesFromXlsx(AbstractFile af) {
|
||||
List<ExtractedImage> listOfExtractedImages;
|
||||
Workbook xlsx;
|
||||
List<? extends org.apache.poi.ss.usermodel.PictureData> listOfAllPictures = null;
|
||||
|
||||
try {
|
||||
xlsx = new XSSFWorkbook(new ReadContentInputStream(af));
|
||||
Workbook xlsx = new XSSFWorkbook(new ReadContentInputStream(af));
|
||||
listOfAllPictures = xlsx.getAllPictures();
|
||||
} catch (POIXMLException | IOException ex) {
|
||||
// POIXMLException:
|
||||
// Thrown when document fails to load.
|
||||
|
||||
// IOException:
|
||||
// Thrown when the document has issues being read
|
||||
|
||||
return null;
|
||||
} catch (Throwable ex) {
|
||||
// instantiating POI containers throw RuntimeExceptions
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.xlsxContainer.init.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
List<? extends org.apache.poi.ss.usermodel.PictureData> listOfAllPictures = null;
|
||||
try {
|
||||
listOfAllPictures = xlsx.getAllPictures();
|
||||
} catch (Exception ex) {
|
||||
// log internal Java and Apache errors as WARNING
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName()), ex); //NON-NLS
|
||||
logger.log(Level.SEVERE, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.xlsxContainer.init.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -561,20 +549,17 @@ class ImageExtractor {
|
||||
outputFolderPath = getOutputFolderPath(this.parentFileName);
|
||||
}
|
||||
if (outputFolderPath == null) {
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.extractImageFrom.outputPath.exception.msg", af.getName())); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
listOfExtractedImages = new ArrayList<>();
|
||||
List<ExtractedImage> listOfExtractedImages = new ArrayList<>();
|
||||
byte[] data = null;
|
||||
for (org.apache.poi.ss.usermodel.PictureData pictureData : listOfAllPictures) {
|
||||
String imageName = UNKNOWN_NAME_PREFIX + i + "." + pictureData.suggestFileExtension();
|
||||
try {
|
||||
data = pictureData.getData();
|
||||
} catch (Exception ex) {
|
||||
// log internal Java and Apache errors as WARNING
|
||||
logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName()), ex); //NON-NLS
|
||||
return null;
|
||||
}
|
||||
writeExtractedImage(Paths.get(outputFolderPath, imageName).toString(), data);
|
||||
|
Loading…
x
Reference in New Issue
Block a user