在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();