我使用以下代码上传图片。问题是上传图像后我无法更改文件权限。我默认设置的文件权限是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);
}
%>
答案 0 :(得分:1)
您无法从java代码中更改文件权限。
对于新文件,系统的默认umask设置为0644
。更改默认的umask不是一个好主意。
您需要做的是将目录的权限设置为0777
,然后将目录的ACL
重新定义为递归,这样在内部创建的所有新文件都将继承相同的权限。
下面是一个链接,显示了如何去做 - https://superuser.com/questions/151911/how-to-make-new-file-permission-inherit-from-the-parent-directory
答案 1 :(得分: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?