struts2文件上传下载
文件上传部分:上传页面 upload.jsp
<s:form action ="upload" method ="POST" enctype ="multipart/form-data" > <s:file name ="file" label ="上传文件"/> <s:submit /> </s:form >
上传 UploadAction.java
private File file; private String fileFileName; private String fileContextType; private String root; private HttpServletRequest request; private Map session; @Override public String execute() throws Exception { session.put("fileFileName", fileFileName); //取文件后缀名 String lastname=null; int i = fileFileName.lastIndexOf('.'); lastname=fileFileName.substring(i+1); //取当前日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Calendar calendar = Calendar.getInstance(); String date=sdf.format(calendar.getTime()); //10亿的随机数 java.util.Random r=new java.util.Random(); String radom=String.valueOf(r.nextInt(1000000000)); fileFileName=date+radom+"."+lastname; session.put("fname", fileFileName); InputStream is=new FileInputStream(file); root= ServletActionContext.getRequest().getRealPath("/upload") ;//存储到apache项目发布目录上 // String root="D:\\a1/upload";//存储到项目文件夹里 session.put("fpath", root); File copyFile=new File(root,fileFileName); OutputStream os=new FileOutputStream(copyFile); byte[] buffer=new byte; int length=0; while( (length=is.read(buffer)) > 0 ){ os.write(buffer, 0, length); } is.close(); os.close(); return SUCCESS; }
struts.xml配置
<action name="upload" class="com.enorth.mpup.action.UploadAction"> <result name="success">uploadshow.jsp</result> <result name="input">index.jsp</result> </action>
文件下载部分:
下载页面 uploadshow.jsp
<a href="download.action" target="_blank"> <%=session.getAttribute("fileFileName") %> </a> 下载 FileDownAction.java
private String fileName;// 初始的通过param指定的文件名属性 private String inputPath;// 指定要被下载的文件路径 private HttpServletRequest request; private Map session; public InputStream getInputStream() throws Exception { // 通过 ServletContext,也就是application 来读取数据 inputPath="/upload/"+(String)session.get("fname"); return ServletActionContext.getServletContext().getResourceAsStream(inputPath); } public String execute() throws Exception { return SUCCESS; } /** 提供转换编码后的供下载用的文件名 */ public String getDownloadFileName() { fileName=(String) session.get("fname"); System.out.println(fileName); String downFileName = fileName; try { downFileName = new String(downFileName.getBytes(), "ISO8859-1"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return downFileName; }
struts.xml配置
<!-- 下载现有文件 --> <action name="download" class="com.enorth.mpup.action.FileDownAction"> <!-- <param name="inputPath">/download/aaa.txt</param> --> <!-- 初始文件名 <param name="fileName">aaa.txt</param>--> <result name="success" type="stream"> <param name="contentType"> application/octet-stream;charset=ISO8859-1 </param> <param name="inputName">inputStream</param> <!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性 对应action类中的方法 getDownloadFileName() --> <param name="contentDisposition"> attachment;filename="${downloadFileName}" </param> <param name="bufferSize">4096</param> </result> </action> Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream 这两个错误的原因是缺少jar包. commons-fileupload-1.2.1.jar commons-io-1.4.jar
页:
[1]