在应用swfupload上传图片的至Linux时遇到的问题
[img]http://dl2.iteye.com/upload/attachment/0087/4929/f58e9dd9-0474-356f-87f8-aa0941f0623c.jpg[/img]
异常如下:java.io.FileNotFoundException: /var/lib/tomcat7/webapps/sxtour_core/htmlpage/upload/scenery/199/2.jpg (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:209)
at java.io.FileOutputStream.<init>(FileOutputStream.java:160)
at com.tour.util.UploadFile.copy(UploadFile.java:32)
at com.tour.util.UploadFile.uploadPic(UploadFile.java:90)
........
重点在FileNotFoundException以及Permission denied上,从字面意思理解是文件的写入权限被拒绝,所以就要开启相应目录的写入权限。
解决方法:
1、到达root目录下
2、执行chmod 777 -R /root/yourfilepath
这样就会开启“yourfilepath”目录以及下面所有文件的写入权限,你就可以在lunix下指定的目录下写文件啦。
除此之外你也会发现在使用swfupload的时候会生成一些临时文件,那么这些临时文件什么呢?它其实就是文件上传时未被移除的参数形成的文件,那么其实它是应该被删掉的,但是如果你是在很多地方应用上传的话就要配置拦截器去拦截这些参数(这个可以在网上搜,一大把,这里就不详述了),不让它传到后端从而也不会生成临时文件,那么linux里边的临时文件的写入权限你也就不用开启和配置了,我这边因为很多个ACTION都引用了上传且上传只是其中一个方法的一个调用而已,所以无法简单的使用参数拦截器去拦截,那样会影响其他方法参数传递,所以本人就用最笨的方式:删除相应的临时文件,删除时注意linux下路径的写法,windows就不用说了。
这里顺便附上删除文件夹以及文件夹下所有文件的代码
/**
* 删除某个文件夹下的所有文件夹和文件
*
* @param delpath String
* @throws FileNotFoundException
* @throws IOException
* @return boolean
*/
public static boolean deletefile(String delpath)
throws FileNotFoundException, IOException {
try {
File file = new File(delpath);
if (!file.isDirectory()) {
System.out.println("+++++++++不存在此目录!++++++++++++");
file.delete();
} else if (file.isDirectory()) {
System.out.println("++++++++++++存在此目录++++++++++++");
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
File delfile = new File(delpath + "\\" + filelist[i]);
if (!delfile.isDirectory()) {
System.out.println("path=" + delfile.getPath());
System.out.println("absolutepath="
+ delfile.getAbsolutePath());
System.out.println("name=" + delfile.getName());
delfile.delete();
System.out.println("删除文件成功!");
} else if (delfile.isDirectory()) {
deletefile(delpath + "\\" + filelist[i]);
}
}
file.delete();
}
} catch (FileNotFoundException e) {
System.out.println("deletefile() Exception:" + e.getMessage());
}
return true;
}
[img]http://dl2.iteye.com/upload/attachment/0087/4929/f58e9dd9-0474-356f-87f8-aa0941f0623c.jpg[/img]
异常如下:java.io.FileNotFoundException: /var/lib/tomcat7/webapps/sxtour_core/htmlpage/upload/scenery/199/2.jpg (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:209)
at java.io.FileOutputStream.<init>(FileOutputStream.java:160)
at com.tour.util.UploadFile.copy(UploadFile.java:32)
at com.tour.util.UploadFile.uploadPic(UploadFile.java:90)
........
重点在FileNotFoundException以及Permission denied上,从字面意思理解是文件的写入权限被拒绝,所以就要开启相应目录的写入权限。
解决方法:
1、到达root目录下
2、执行chmod 777 -R /root/yourfilepath
这样就会开启“yourfilepath”目录以及下面所有文件的写入权限,你就可以在lunix下指定的目录下写文件啦。
除此之外你也会发现在使用swfupload的时候会生成一些临时文件,那么这些临时文件什么呢?它其实就是文件上传时未被移除的参数形成的文件,那么其实它是应该被删掉的,但是如果你是在很多地方应用上传的话就要配置拦截器去拦截这些参数(这个可以在网上搜,一大把,这里就不详述了),不让它传到后端从而也不会生成临时文件,那么linux里边的临时文件的写入权限你也就不用开启和配置了,我这边因为很多个ACTION都引用了上传且上传只是其中一个方法的一个调用而已,所以无法简单的使用参数拦截器去拦截,那样会影响其他方法参数传递,所以本人就用最笨的方式:删除相应的临时文件,删除时注意linux下路径的写法,windows就不用说了。
这里顺便附上删除文件夹以及文件夹下所有文件的代码
/**
* 删除某个文件夹下的所有文件夹和文件
*
* @param delpath String
* @throws FileNotFoundException
* @throws IOException
* @return boolean
*/
public static boolean deletefile(String delpath)
throws FileNotFoundException, IOException {
try {
File file = new File(delpath);
if (!file.isDirectory()) {
System.out.println("+++++++++不存在此目录!++++++++++++");
file.delete();
} else if (file.isDirectory()) {
System.out.println("++++++++++++存在此目录++++++++++++");
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
File delfile = new File(delpath + "\\" + filelist[i]);
if (!delfile.isDirectory()) {
System.out.println("path=" + delfile.getPath());
System.out.println("absolutepath="
+ delfile.getAbsolutePath());
System.out.println("name=" + delfile.getName());
delfile.delete();
System.out.println("删除文件成功!");
} else if (delfile.isDirectory()) {
deletefile(delpath + "\\" + filelist[i]);
}
}
file.delete();
}
} catch (FileNotFoundException e) {
System.out.println("deletefile() Exception:" + e.getMessage());
}
return true;
}