Ext结合Struts2 上传文件

每次上传的时候总是报 拒绝访问,我google了下,看到说是路径不对,字符串写错,或者权限不够,但是我看了下我的,没写错,路径正确
权限是超级管理员登陆的 怎么回事 ?还望大家给看下

[code="java"]

public String fileupload() {
    try {
        File file1 = this.getFile();
        System.out.println(file1.getName());
        String path = ServletActionContext.getServletContext().getRealPath("/upload");
        System.out.println(path);
        Util.write(path, file);
    ServletActionContext.getResponse().getWriter().println("成功");
    } catch (Exception e) {
        e.printStackTrace();
        return INPUT;
    }
    return "file";
}

[/code]

[code="java"]

//写一个静态的方法,以便调用
public static void write(String path,File file){
final int BUFFER_SIZE = 16 * 1024 ;
try {
InputStream in = null ;
OutputStream out = null ;
try {

in = new BufferedInputStream( new FileInputStream(path), BUFFER_SIZE);
out = new BufferedOutputStream( new FileOutputStream(file), BUFFER_SIZE);
byte [] buffer = new byte [BUFFER_SIZE];
while (in.read(buffer) > 0 ) {
out.write(buffer);
}
} finally {
if ( null != in) {
in.close();
}
if ( null != out) {
out.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}

}

[/code]

异常的代码,就一个异常
[code="java"]
upload__683d9dab_11d7b418a9f__8000_00000000.tmp
E:\apache-tomcat-6.0.16\apache-tomcat-6.0.16\webapps\pkm\upload
java.io.FileNotFoundException: E:\apache-tomcat-6.0.16\apache-tomcat-6.0.16\webapps\pkm\upload (拒绝访问。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(FileInputStream.java:137)
at java.io.FileInputStream.(FileInputStream.java:96)
at com.pkm.util.Util.write(Util.java:22)

[/code]

[b]问题补充:[/b]

那个--上一站火星。我当时改了之后但是立马在看文件夹还是只读的

回 jones 为什么我在JSP和struts1.x 里面也是这样写的OK 而struts2 就不行?

[b]问题补充:[/b]
回JSONS 我想我是明白了,但是我怎么把路径给转回来,别让我用字符串一个一个来替换,有什么好的方法没??谢谢
[b]问题补充:[/b]
回JSON
艾,咱也没找到好方法,刚才吃饭之前就是用replaceAll() 不过不知道有没什么方法,直接用上去,不替换的有米有 呵呵
[b]问题补充:[/b]
不行了,同志们,咱转换也不行
upload__14cccc4e_11d7bcd629c__8000_00000000.tmp
E:/apache-tomcat-6.0.16/apache-tomcat-6.0.16/webapps/pkm/upload
java.io.FileNotFoundException: E:\apache-tomcat-6.0.16\apache-tomcat-6.0.16\webapps\pkm\upload (拒绝访问。)

这个不行

        File file1 = this.getFile();
        System.out.println(file1.getName());
        String path = ServletActionContext.getServletContext().getRealPath("//upload");
        String root  = path.toString().replaceAll("\\\\", "/");
        System.out.println(root);
        Util.write(root, file);
    ServletActionContext.getResponse().getWriter().println("成功");

[b]问题补充:[/b]
JSON 这个东西不行啊,咱还是不能搞定 ,能帮看下吗?
[b]问题补充:[/b]
晕,刚没注意看,我改了下,谁知道没改完 抱歉抱歉

我晕,行了,别再路径这个问题上费时间了,应该不是路径问题,你程序我感觉就不对,
这个:
[code="java"]File file1 = this.getFile(); [/code]得到的是file1,可是你却
[code="java"]Util.write(path, file); [/code]这个file哪里来的啊??

E:\apache-tomcat-6.0.16\apache-tomcat-6.0.16\webapps\pkm\upload这个目录没找到或者是不能写入。

E:\apache-tomcat-6.0.16\apache-tomcat-6.0.16\webapps\pkm\upload把这个目录的权限该为可读写的

windows中路径改应该使用双斜杠:你传递到第二个方法进去的path为:
[quote]E:\apache-tomcat-6.0.16\apache-tomcat-6.0.16\webapps\pkm\upload[/quote]
改成:
[quote]E:\apache-tomcat-6.0.16\apache-tomcat-6.0.16\webapps\pkm\upload[/quote]
或者
[quote]E:/apache-tomcat-6.0.16/apache-tomcat-6.0.16/webapps/pkm/upload[/quote]
看看你的控制台第二行就明白了

就是把upload文件夹的只读属性去掉

回楼主,因为我当时回答这个问题的时候犯傻了,嘿嘿,双斜杠只是为了定义字符串路径时候转义用的,现在才回过味儿来,幸亏没误导你,顺便再说句,可能是这个原因:
因为你的E盘是NTFS格式的,所以每个文件夹对每个用户来说都具有一定的安全设置,你可以这样,首先右键那个upload文件夹-》右键属性-》看有没有”安全“选项,如果没有-》在资源管理器上方的菜单中选择”工具“-》文件夹选项-》”查看“选项卡-》去掉”使用简单文件共享“-》再右键upload文件夹,-》属性-》这个时候应该就有一个”安全“的选项卡了,在这里添加上everyone对象,并设置权限为所有权限,这个时候upload文件夹就任何人都可以访问了。以上信息仅供参考,当年我玩ASP+Access的时候发现的这个问题,access数据库放到一个文件夹后数据库总是写不了,后来发现需要这样设置这个文件夹的权限才行

我给你一个建议,不要使用window的路径分隔符\,这个不通用,直接使用unix下的/好了,windows上的JAVA也支持这个分隔符的,也就是说路径分隔符用/到哪里都通用,如果你想替换,直接String.replaceAll();

呵呵,因为你这个句:
[code="java"]String path = ServletActionContext.getServletContext().getRealPath("/upload");[/code]
这个本身搞到的就是一个字符串,针对字符串无非就是用replaceAll(),目前还没有什么好的办法。replaceAll()就是利用正则表达式实现的。

因为你的E盘是NTFS格式的,所以每个文件夹对每个用户来说都具有一定的安全设置,你可以这样,首先右键那个upload文件夹-》右键属性-》看有没有”安全“选项,如果没有-》在资源管理器上方的菜单中选择”工具“-》文件夹选项-》”查看“选项卡-》去掉”使用简单文件共享“-》再右键 upload文件夹,-》属性-》这个时候应该就有一个”安全“的选项卡了,在这里添加上everyone对象,并设置权限为所有权限,这个时候 upload文件夹就任何人都可以访问了。以上信息仅供参考,当年我玩ASP+Access的时候发现的这个问题,access数据库放到一个文件夹后数据库总是写不了,后来发现需要这样设置这个文件夹的权限才行

[url]http://hi.baidu.com/ggstudyblog/blog/item/90996efb376641274f4aeabd.html[/url]