当前位置:编程学习 > JAVA >>

struts发布后上传文件出错

本地一切正常,发布之后就得不到文件名了。上代码:



public class UploadAction {//action set get方法都有
private File file; //input name相同的名称
private String fileFileName;//文件名
private String title;//图片名称
private int imgNum;//图片编号
private String add;//图片指向连接

public String execute(){
String type=getFileFileName().substring(getFileFileName().indexOf(".")+1);
String path=ServletActionContext.getServletContext().getRealPath("/img");
Picture pic = new Picture();
pic.setId(imgNum);
pic.setTitle(title);
pic.setUrl(add);
pic.setPath("./img/"+imgNum+"."+type);
try{
File f1 = new File(path,imgNum+"."+type);
File f=new File(path,imgNum+"."+type);
if(f1.exists()){
f1.delete();
}
FileUtils.copyFile(file, f);
  NewsDAO dao = new JdbcNewsDao();
  dao.updatePic(pic);
 }catch (Exception e) {
 e.printStackTrace();
}
return "success";
}



<constant name="struts.multipart.saveDir" value="./img"/>//设置虚拟路径
<action name="upload" class="com.kss.action.admin.UploadAction" >
     <result name="success" type="redirect">./admin/htgl.jsp?type=lunbo</result>
     </action>//struts.xml action配置 



发布后的报错
java.lang.NullPointerException
com.kss.action.admin.UploadAction.execute(UploadAction.java:20)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
--------------------编程问答-------------------- 从代码中看不出来,空指针异常是20行是f1.delete()吗,不可能啊 --------------------编程问答--------------------
引用 1 楼 ahuter9 的回复:
从代码中看不出来,空指针异常是20行是f1.delete()吗,不可能啊
 不是delete 是解析类型时报空指针 --------------------编程问答--------------------
引用 2 楼 jqch521 的回复:
引用 1 楼 ahuter9 的回复:从代码中看不出来,空指针异常是20行是f1.delete()吗,不可能啊 不是delete 是解析类型时报空指针
String type=getFileFileName().substring(getFileFileName().indexOf(".")+1); 这句话报错了 --------------------编程问答-------------------- 自己顶~~~求大神啊 --------------------编程问答-------------------- String type=getFileFileName().substring(getFileFileName().indexOf(".")+1);这样是有问题的如果文件名里包含了“.”你会得不到自己想要的文件类型;
--------------------编程问答-------------------- 看代码已经发觉应该是第一行报错!
getFileFileName()应该是这个有问题 你看看打印下 再看看封装的有的有问题能否对应上 --------------------编程问答-------------------- 还有这个fileFileName 命名很无语啊 --------------------编程问答-------------------- String[] str = filesFileName[i].split("\\.");     
filetype = str[str.length - 1].toLowerCase(); 
换这种方式吧 --------------------编程问答-------------------- 如果你已经有了set,get方法可以直接拿fileFileName来用了,
String[] str = filesFileName.split("\\.");      
filetype = str[str.length - 1].toLowerCase(); 
--------------------编程问答-------------------- String[] str = fileFileName.split("\\."); 
多了个s --------------------编程问答-------------------- 重新部署试试 --------------------编程问答-------------------- 各位大神们 注意报的错啊 NullPointer空指针,也就是fileFileName的值是null,我想问的是为什么是null? 在本地测试的时候明明是可以用的,为什么发布之后就不行了。还有 重新部署了N*N遍了还是不行 --------------------编程问答-------------------- struts2的话xml文件里要加上
<interceptor-ref name="fileUpload">  
                <param name="maximumSize">20000000000</param>  
             </interceptor-ref>  
             <interceptor-ref name="defaultStack"/> --------------------编程问答-------------------- 本地可以是因为你只实现了本地文件拷贝;发布后服务器上并没有相应的文件 --------------------编程问答--------------------
引用 7 楼 liu4626846 的回复:
还有这个fileFileName 命名很无语啊

这个好像是struts2规定的命名吧 --------------------编程问答-------------------- 在execute()执行一开始
           System.out.println("我是文件:"+file);
   System.out.println("我是文件名:"+fileFileName);

输出这两句,直接就收不到jsp页面传过来的file

在服务器端用log4j 的输出信息:
我是文件:null  
我是文件名:null

在本地输出:
我是文件:.\img\upload__1cc34d69_13b88e9b363__8000_00000001.tmp
我是文件名:Hydrangeas.jpg --------------------编程问答-------------------- 大神们快来吧 项目就快交付了
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,