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--------------------编程问答-------------------- 从代码中看不出来,空指针异常是20行是f1.delete()吗,不可能啊 --------------------编程问答-------------------- 不是delete 是解析类型时报空指针 --------------------编程问答-------------------- String type=getFileFileName().substring(getFileFileName().indexOf(".")+1); 这句话报错了 --------------------编程问答-------------------- 自己顶~~~求大神啊 --------------------编程问答-------------------- String type=getFileFileName().substring(getFileFileName().indexOf(".")+1);这样是有问题的如果文件名里包含了“.”你会得不到自己想要的文件类型;
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)
--------------------编程问答-------------------- 看代码已经发觉应该是第一行报错!
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"/> --------------------编程问答-------------------- 本地可以是因为你只实现了本地文件拷贝;发布后服务器上并没有相应的文件 --------------------编程问答--------------------
这个好像是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 开发