我正在使用以下代码上传图片。问题是上传图片后,我无法更改文件权限。我的文件权限默认设置为rw-r-- r--(0644)。是否可以更改文件权限或将其0777默认设置为?它在我的本地系统中运行良好。但是无法更改我的Linux服务器中的权限。
rw-r-- r--
0644
0777
<% try { int filesize=0; String fieldname="",fieldvalue="",filename="",content="",bookid="",bkdescription=""; try { List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); for (FileItem item : items) { if (item.isFormField()) { fieldname = item.getFieldName(); fieldvalue = item.getString(); if(fieldname.equals("homeid")){ bookid=fieldvalue; } if(fieldname.equals("bkdescription")){ bkdescription=fieldvalue; } } else { try{ fieldname = item.getFieldName(); filename = FilenameUtils.getName(item.getName()); InputStream filecontent = item.getInputStream(); filesize=(int)item.getSize(); filename="literal_"+bookid+".jpg"; if(filesize>0){ byte[] b=new byte[filesize]; int c=0; File f=new File(getServletConfig().getServletContext().getRealPath("/")+"/imagesX"); String filePah=getServletConfig().getServletContext().getRealPath("/")+"/imagesX"; if(f.isDirectory()) { String fl[]=f.list(); for(int i=0;i<fl.length;i++) { File fd=new File(getServletConfig().getServletContext().getRealPath("/")+"/imagesX/"+fl[i]); if(fd.getName().equals(filename)) fd.delete(); } } if(!f.exists()) { new File(filePah).mkdir(); f.mkdir() } java.io.FileOutputStream fout=new java.io.FileOutputStream(getServletConfig().getServletContext().getRealPath("/")+"/imagesX/"+filename); while((c = filecontent.read(b)) != -1 ) { fout.write(b, 0, c); } fout.close(); filecontent.close(); } }catch (Exception e) { System.out.println("Exception in creation of file :"+e); } } } } catch (FileUploadException e) { throw new ServletException("Cannot parse multipart request.", e); } } catch(Exception exp) { out.println(exp); } %>
您不能从Java代码内部更改文件许可权。
系统的默认umask设置0644为新文件。更改默认的umask并不是一个好主意。
您需要做的是将目录的权限设置为0777,然后将目录的权限重新定义ACL为递归,以便在其中创建的所有新文件都将继承相同的权限。
ACL
继承人的链接显示了如何去哪些- https://superuser.com/questions/151911/how-to-make-new-file- permission-inherit-from-the-parent- directory