基本上我有一个从教程中得到的方法(我的主要目标是简单地从spring引导服务器返回图像,这样我就可以动态地查看它们)
@RestController
public class FileController {
@Autowired
ServletContext context;
@GetMapping(path = "/allImages")
public ResponseEntity<List<String>> getImages(){
List<String> images = new ArrayList<String>();
String filesPath = context.getRealPath("/images");
File fileFolder = new File(filesPath);
if(fileFolder!=null) {
for(final File file : fileFolder.listFiles()) {
if(!file.isDirectory()) {
String encodeBase64 = null;
try {
String extention = FilenameUtils.getExtension(file.getName());
FileInputStream fileInputStream = new FileInputStream(file);
byte[] bytes = new byte[(int)file.length()];
encodeBase64 = Base64.getEncoder().encodeToString(bytes);
images.add("data:image/"+extention+";base64,"+encodeBase64);
fileInputStream.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
}
return new ResponseEntity<List<String>>(HttpStatus.OK);
}
使用当前代码,当我尝试返回文件时,我得到:
java.lang.NullPointerException: Cannot read the array length because the return value of "java.io.File.listFiles()" is null
我四处搜索,发现人们推荐使用 java.nio.file
相反,我有点迷茫我该如何实现这一点。感谢您的帮助。
3条答案
按热度按时间93ze6v8z1#
nio示例:
ymzxtsji2#
先拿一个
Path
到您的文件夹:如果你的
Path
指向一个目录,就可以得到一个Stream<Path>
其内容使用Files.list
:看起来你不是在用
FileInputStream
所以你不需要翻译那部分。要获取路径的文件扩展名,可能需要将Path
然后自己提取扩展名。ma8fv8wu3#
我用这个代码解决了这个问题:
感谢所有帮助过你的人。