利用struts2上传和下载文件

来源:互联网 发布:一对一色情直播软件 编辑:程序博客网 时间:2024/06/08 11:55
package com.file.action;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import com.opensymphony.xwork2.ActionSupport;//下载文件的actionpublic class FileDownloadAction extends ActionSupport {/**    *   fileName:文件名 */   private String fileName;public String execute() throws Exception {return SUCCESS;}/**@description:获得文件流 * @author:yehui * @return: */public InputStream getDownloadFile() {InputStream is = null;try {is = new FileInputStream("c:/Intel/" + fileName);} catch (FileNotFoundException e) {e.printStackTrace();}return is;}/**@description:处理乱码 * @author:yehui * @return: */public void setFileName(String fileName) {try {this.fileName = new String(fileName.getBytes("ISO-8859-1"), "GBK");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}public String getFileName() {String name = "";try {name = new String(fileName.getBytes("GBK"), "ISO8859-1");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return name;}}
上传文件的action
package com.file.action;import java.io.File;import org.apache.commons.io.FileUtils;import com.opensymphony.xwork2.ActionSupport;public class FileUploadAction extends ActionSupport {/** * 从页面上获得上传的文件 */private File file;private String contentType;/** * 文件名 */private String fileName;@Overridepublic String execute() throws Exception {File saveFile = new File("c:/download/" + fileName);if (!saveFile.getParentFile().exists())saveFile.getParentFile().mkdirs();// 将上传的文件copy到指定的位置File("c:/download/" + fileName)FileUtils.copyFile(file, saveFile);return SUCCESS;}public void setUploadContentType(String contentType) {this.contentType = contentType;}public void setUpload(File file) {this.file = file;}public void setUploadFileName(String fileName) {this.fileName = fileName;}}
文件下载列表action
package com.file.action;import java.io.File;import java.util.LinkedList;import java.util.List;import com.opensymphony.xwork2.ActionSupport;public class FileListAction extends ActionSupport {/**    *   页面上显示的文件列表 */   private List<File> files = new LinkedList<File>();public String findFile() throws Exception {files=getFiles();return SUCCESS;}public List<File> getFiles() {File file = new File("c:/Intel/");File filelist[] = file.listFiles();for (File f : filelist) {files.add(f);}return files;}}
struts.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><!-- 设置默认编码格式 --><constant name="struts.i18n.encoding" value="GBK" /><!-- 设置最大上传文件是300M --><constant name="struts.multipart.maxSize" value="314572800" /><!-- 设置默认的临时文件存储位置 --><constant name="struts.multipart.saveDir" value="C:/Intel" /><!-- 设置调试模式 --><constant name="struts.devMode" value="true"></constant><package name="fileupload" extends="struts-default" namespace="/file"><!-- 文件上传 --><action name="upload" class="com.file.action.FileUploadAction"><result type="redirectAction"><param name="actionName">list</param><param name="namespace">/file</param></result></action><!-- 下载文件 --><action name="download" class="com.file.action.FileDownloadAction"><result type="stream" name="success"><param name="contentType">application/octet-stream</param><!-- 要有相对应的getDownloadFile()方法返回值是 InputStream --><param name="inputName">downloadFile</param><param name="contentDisposition">attachment;filename="${fileName}"</param><param name="bufferSize">4096</param></result></action><!-- 文件下载列表 --><action name="list" class="com.file.action.FileListAction"><result>/file.jsp</result></action></package></struts> 


jsp文件,用于显示文件列表,并下载,和上传文件


<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><%@taglib uri="/struts-tags" prefix="s"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head></head><body><h3>下载文件</h3><table align="center" border="1"><tr><td width="10%">序号</td><td width="80%">文件名</td><td width="10%">下载</td></tr><tr><td><s:iterator status="status" value="files" var="f"><tr><td><s:property value="#status.count" /></td><td><s:property value="#f.name" /></td><td><s:a action="download" namespace="/file" encode="false"><s:param name="fileName" value="%{#f.name}" />下载</s:a></td></tr></s:iterator></table><hr><!-- 文件上传模块 --><s:form action="upload" method="post" enctype="multipart/form-data" namespace="/file"><s:file label="请选择文件" name="upload" ></s:file><s:submit name="submit" value="提交"></s:submit><s:fielderror name="isSuccess" /></s:form><s:debug></s:debug></body></html>


注意:action中execute()方法可以修改为自己定义的方法,返回值不变。页面提交的action需要修改。