这是第三次写关于文件上传的随笔了,为了这文件上传我也是醉了。废话不多说,下面开说问题:
项目中有一个上传文件的功能,好不容易把上传功能写完了,在本地运行没有问题,以为文件没有问题了,然后就开始把项目部署到服务器上运行,但是部署到服务器之后,其他的功能都没有问题,但是提交带有文件上传的表单的时候就一直报错,报什么错呢?
No result defined for action 最恶心的错误之一有木有?只有这样的一句错误,别的什么都没有,怎么下手解决都不知道,然后开始上网去搜解决办法,以前也遇到过类似的问题,然后使用下面的方法解决了:
这是struts2的一个拦截器报的错误,当你的form中的数据有问题,比如说
<input type="text" name="receiverLoginID" value="<%=name%>"/>
当 name值为NULL时,就出这个错了,所以你可以在当前页面加入以下标签
<div style="color:red">
<s:fielderror />
</div>
它就会显示拦截器的错误,并在struts的XML中对应action里加如
<result name="input">/AddProducts.jsp</result>
让他把错误返回到该页面就可以了
问题,但是结果就是上传文件的问题。
使用<s:debug>标签看到的问题是什么呢?.tmp文件的系统路径找不到了。这是怎么回事呢?原来是上传文件的时候,系统会生成一个临时文件保存下来,然后在我的struts.xml文件中有一个存储临时文件的文件夹,
<!-- 临时存放文件的路径 -->
<constant name="struts.multipart.saveDir" value="c:/test"></constant>
但是刚开始我写的是
<!-- 临时存放文件的路径 -->
<constant name="struts.multipart.saveDir" value="e:/test"></constant>
有人会说不就是把临时文件的存储路径改了一下吗?没什么问题啊,可是关键是服务器上只有c盘,没有E盘怎么破?上传文件时候系统找不到存储临时文件的位置了,那么肯定要报错的。以后这些东西还是需要多注意的,写程序并不是简单的完成功能就完事的,以后需要改进的地方还很多,继续努力!!!