zxqmnzi
2008-11-08 16:41
浏览 163
已采纳

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]
晕,刚没注意看,我改了下,谁知道没改完 抱歉抱歉

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

10条回答 默认 最新

  • iteye_521 2008-11-08 19:37
    已采纳

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

    已采纳该答案
    打赏 评论
  • iteye_14081 2008-11-08 16:43

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

    打赏 评论
  • iteye_14081 2008-11-08 16:47

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

    打赏 评论
  • iteye_521 2008-11-08 16:47

    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]
    看看你的控制台第二行就明白了

    打赏 评论
  • iteye_14081 2008-11-08 16:47

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

    打赏 评论
  • iteye_521 2008-11-08 18:11

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

    打赏 评论
  • iteye_521 2008-11-08 18:14

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

    打赏 评论
  • iteye_521 2008-11-08 18:45

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

    打赏 评论
  • iteye_521 2008-11-08 19:17

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

    打赏 评论
  • iteye_521 2008-11-08 19:20
    打赏 评论

相关推荐 更多相似问题