jsp页面代码
<form action ="${ctx}/order/upload.action" method="post" enctype="multipart/form-data"> <s:file name="upload" label="上传"/> 或者 <input name="upload" type="file"> <button>提交</button> </form>
服务后台代码:
需要两个jar包一个是commons-fileupload.jar,另一个是commons-io.jar
//注意,file并不是指前端jsp上传过来的文件本身,而是文件上传过来存放在临时文件夹下面的文件 private File upload;//上传的文件内容的对象与表单中的name属性一致 private String uploadContentType;//Struts2约定的代表上传文件的内容类型(MIME) private String uploadFileName;//Struts2约定的代表上传的文件的名 省略了get,set方法 //文件上传方法 public String upload(){ //服务端存放上传文件目录 String destPath = ServletActionContext.getServletContext().getRealPath("/upload"); System.out.println(destPath); File file=new File(destPath); if(!file.exists()) file.mkdirs(); System.out.println(file); try { FileUtils.copyFile(upload, new File(file,uploadFileName)); } catch (IOException e) { e.printStackTrace(); return ERROR; } return SUCCESS; }
strut配置
<action name="upload" class="orderAction" method="upload" > <result name="success">/WEB-INF/pages/order/orderdetail.jsp</result> </action>
上传后的文件保存在tomcat安装路径/webapps/应用名称/upload文件夹下
我的机器为
D:\Program Files\apache-tomcat-7.0.62\webapps\admin\upload
Struts 2是通过Commons FileUpload文件上传。
Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件
再添加<constant name="struts.multipart.maxSize" value ="10240000" />,Struts2的文件上传功能默认最大只能上传2M大小。这句重新指定了上传文件的最大限制,单位是字节。以这句为例,上传文件不能超过 10240000字节。注意,不能写成1024*1000*10这种形式。
在<package>标签之外添加<constant name="struts.multipart.saveDir" value ="/temp"/>,这句指定了上传文件的临时存放目录,以这句为例,临时存放目录为应用所在根目录下的temp文件夹,假设我的应用放在D:\Program Files\apache-tomcat-6.0.24\webapps下,那么临时存放目录就是D:\temp。也可以指定一个绝对路径。目录不存在也没关系,会自动创建。
struct 配置文件上传拦截器
</action> <!-- 上传 --> <action name="upload" class="com.erentc.Web.Action.hp.UploadeAction"> <!-- 指定系统提供的上传文件过滤的拦截器 --> <interceptor-ref name="fileUpload"> <param name="allowedTypes"> p_w_picpath/gif,p_w_picpath/pjpeg,p_w_picpath/x-png,p_w_picpath/jpg </param><!-- 允许上传的文件类型 --> <param name="maximumSize">900000</param><!-- 允许上传的文件大小 --> </interceptor-ref> <!-- 引用系统默认拦截器 --> <interceptor-ref name="defaultStack" /> <!-- 通过param 元素注入savePath属性 --> <param name="savePath">/GoodsPic/upload</param><!-- 配置上传的路径 --> <result name="input">/uplode.jsp</result><!--发生错误时候 跳转的页面 --> <result name="success">/succ.jsp</result> </action>
the request was rejected because its size (3020812) exceeds the configured maximum (2097152)