1.upload.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@taglib uri="/struts-tags" prefix="s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> <base href="<%=basePath%>"> </head> <body> <!-- <form action="upload" method="get"> 文件标题:<input type="text" name="filename"/><br/> 上传文件:<input type="file" name="file"><br/> <input type="submit" value="上传"/><br/> </form>--> <s:form action="upload1" enctype="multipart/form-data" methos="post"> <s:textfield name="title" label="文件名"></s:textfield><br/> <s:file name="upload" label="文件"></s:file><br/> <s:submit value="上传"></s:submit><br/> </s:form> </body> </html>
- jsp代码:
- <input type="file" id="license" name="license" style="opacity: 0;">
opacity: 0是让input type=”file”全透明,这样用户看不到input type=”file”。层级在文本框和按钮之上。这样用户在点击按钮的时侯实际上点击的input type=”file”;
使用js提交form表单时,給form定义id属性,直接$("#id").submit();不需要在有<intput type="submit"/>
2.struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <constant name="struts.i18n.encoding" value="utf-8"/> <package name="parameter" namespace="/" extends="struts-default"> <action name="upload1" class="com.ru.action.UploadAction"> <param name="savepath">/upload</param> <!-- 文件上传格式 --> <param name="allowtypes">image/gif,image/x-png,image/jpg,image/jpeg,application/vnd.openxmlformats-officedocument.wordprocessingml.document</param> <result name="sucess">/WEB-INF/jsp/sucess.jsp</result> <result name="error">/WEB-INF/jsp/error.jsp</result> </action> </package> </struts>
3.UploadAction.java
package com.ru.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { //title和upload从jsp页面获取。 private String title; private File upload; //savePath设置文件的存储路径 private String savepath; //分别获取文件的名字和类型。只要有file类型的参数***就对应这两个属性 private String uploadFileName; private String uploadContentType; //文件过滤属性,通过struts.xml文件配置allowtypes属性值 private String allowtypes; public String getAllowtypes() { return allowtypes; } public void setAllowtypes(String allowtypes) { this.allowtypes = allowtypes; } public String getUploadContentType() { return uploadContentType; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public String getUploadFileName() { return uploadFileName; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getSavepath() throws Exception{ return ServletActionContext.getServletContext().getRealPath("/WEB-INF"+savepath); } public void setSavepath(String savepath) { this.savepath = savepath; } //过滤文件 public String filetypes(){ String filetype=getUploadContentType(); String[] types=getAllowtypes().split(","); for(String type:types){ if(type.equals(filetype)){ return "ok"; } } return "error"; } @Override public String execute() throws Exception { // TODO Auto-generated method stub //System.out.print(ServletActionContext.getServletContext().getRealPath("/WEB-INF")); if(filetypes().equals("error")){ this.addFieldError("uploadfileerror", "上传文件类型错误"); return "error"; } FileInputStream fis=new FileInputStream(getUpload()); byte buffer[]=new byte[1024]; int length=0; FileOutputStream fos=new FileOutputStream(getSavepath()+"\\"+getUploadFileName()); while((length=fis.read(buffer))>0){ fos.write(buffer, 0, length); } System.out.print(getUploadContentType()); return "sucess"; } }