2012-06-19 108 views
1

我正在使用下面的代碼上傳圖片。問題是,上傳圖片後,我不能改變文件權限。我的文件權限默認設置爲rw-r--r--0644)。是否可以更改文件權限或默認將其設置爲0777?它在我的本地系統中工作正常。但無法更改我的Linux服務器的權限。在java中設置文件權限5

<% 
    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); 
    } 

    %> 
+1

看到這個答案http://stackoverflow.com/a/3175320/324900 – Reddy

+0

謝謝,我正在尋找這個很長一段時間 – arjuncc

回答

1

您無法從Java代碼中更改文件權限。

對於新文件,系統的默認umask設置爲0644。改變默認的umask並不是個好主意。

您需要做的是將您的目錄權限設置爲0777,然後將您的目錄的ACL重新定義爲遞歸,以便在裏面創建的所有新文件都將繼承相同的權限。

下面有一個示出如何去鏈路 - https://superuser.com/questions/151911/how-to-make-new-file-permission-inherit-from-the-parent-directory

0

一種替代的解決方案是用一個系統命令,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" 
    }); 

P.S.你是否還試圖從Oracle數據庫中的存儲過程調用Java?