我正在使用下面的代码来上传图片。 问题是,上传图像后,我不能改变文件的权限。 我默认设置的文件权限是rw-r--r--
( 0644
)。 是否可以更改文件权限或默认设置为0777
? 它在我的本地系统中工作正常。 但不能改变我的Linux服务器的权限。
<% 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
为递归的,这样所有在里面创建的新文件将继承相同的权限。
下面的链接显示如何去 – https://superuser.com/questions/151911/how-to-make-new-file-permission-inherit-from-the-parent-directory
另一种解决方案是使用系统命令chmod从外部更改权限。
例:
public static void runCmd (String[] cmd) { try { Process p = Runtime.getRuntime().exec(cmd); BufferedReader r = new BufferedReader( new InputStreamReader ( p.getInputStream() ) ); } catch(Exception e) { } } runCmd(new String[] { "/bin/chmod", "755", "/path/to/your/script" });
PS你还试图从一个Oracle数据库中的存储过程调用Java?