在linux上跑的tomcat突然发现没有办法写文件
除了把代码中的路径改正正确之外(https://blog.csdn.net/qq_43639296/article/details/87068059)
注意Tomcat默认没有创建文件的权限,可以先帮它把要用的文件创建一个出来
这样就可以读写这个文件了
至于为什么无法创建,之后有空了研究研究。
——————————————————————————————————
突然发现了问题所在,在原来的代码中使用了FileItem对数据流直接写入,用的内部的某个自动创建文件的方法,就不行。
(不正常的代码:)
FileItem item = dto.getFileMap.get("File");
item.write(new File("xxx"));
所以即使根据网上的方法把catalina.sh里面的umask数值改成0000/0022都没用(https://blog.csdn.net/qq_33333654/article/details/103158262)
但是换成正常的用File对象进行createNewFile(),再用FileOutputStream写数据就可以(修改好umask)
(正常的代码:)
FileItem item = dto.getFileMap().get("file");
File uploadFile = new File(GlobalValues.tempUploadFilePath + fileName);
if (uploadFile.canRead()){
System.out.println(uploadFile.delete());
}
System.out.println(uploadFile.createNewFile());
FileOutputStream fi = new FileOutputStream(uploadFile);
InputStream in = item.getInputStream();
byte[] buffer = new byte[10*1024*1024];
int n = 0;
while (-1 != (n = in.read(buffer))) {
fi.write(buffer, 0, n);
}
fi.flush();
fi.close();