以下解码base64字符串并将其保存到resources/images
文件夹下的文件中。
private final static String IMAGE_FOLDER = new File("resources/images").getAbsoluteFile().getAbsolutePath();
public static String decodeBase64AndSaveImage(String data) throws IOException, BadRequestException {
try {
if (data == null) {
return null;
}
String base64Image = data.split(",")[1];
byte[] imageBytes = DatatypeConverter.parseBase64Binary(base64Image);
BufferedImage img = ImageIO.read(new ByteArrayInputStream(imageBytes));
String imageId = generateRandomKey(15);
File imageFile = new File(IMAGE_FOLDER + File.separator + imageId);
ImageIO.write(img, "png", imageFile);
return imageId;
} catch (IllegalArgumentException e) {
throw new BadRequestException("Bad image data");
}
}
images
文件夹位于/home/user/workspace/myproject/src/main/resources/images
下,但是当我运行测试时,IMAGE_FOLDER
的值为/home/user/workspace/myproject/resources/images
我可以理解,在生产环境中,不再有src/main
个文件夹了。但是,如何在生产和测试环境中采用一致的方法?
注1
测试失败
注2
我尝试了ClassLoader
方法:
Classname.class.getClass().getResource("filename.png")
但它返回null。
答案 0 :(得分:2)
由于您的应用程序写入数据,我建议将包含目标目录路径的变量保存在外部项目代码中。我建议使用环境变量。如果路径存储在环境变量IMG_DIR中,则可以使用System.getenv("IMG_DIR")
从Java代码访问此信息。将此配置项置于JAR外部使得将JAR移动到任何执行环境非常简单。
答案 1 :(得分:0)
通常,resources
目录的路径是相对于可执行文件的。
因此,最好的方法是将可执行文件生成到debug
或release
文件夹。相应的构建文件夹将包含可由可执行文件使用的resources
目录。
从技术上讲,您的构建系统应该处理这些事情,并且在生产中您的安装程序应该处理这些配置以便成功执行。