Struts2中文件的上传下载,是借用commons里面的包实现文件的上传,需要导入两个jar
commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
实现的时候你可以使用s标签,也可以使用普通的表单标签步骤大概如下:
使用s标签的话,先导入标签
修改form 表单的enctype属性
编写action(利用IO流进行上传文件)
1.使用s标签的话,先导入标签
<%@ taglib prefix="s" uri="/struts-tags" %>
2.修改enctype属性
<body>
<s:form action="file2" method="post" enctype="multipart/form-data">
<s:file name="photo"></s:file></br>
<s:submit value="提交"></s:submit>
</s:form>
</body>
3.编写action(利用IO流进行上传文件)
属性:
private File photo;//文件位置 private String photoFileName;// 文件名 private String photoContentType;// 文件类型
上传方法:
public String execute() throws IOException { // 传到哪里(文件长传后的路径) ServletContext servletContext = ServletActionContext .getServletContext(); String path = servletContext.getRealPath("/img/" + photoFileName); System.out.println("文件路径:" + path); // 去读取原文件的位置 FileInputStream in = new FileInputStream(photo); // 写入你定义的文件上传的路径 FileOutputStream out = new FileOutputStream(path); // 写的过程 byte[] buffer = new byte[1024]; int leng = 0; // 就是已经读取文件完成 while ((leng = in.read(buffer)) != -1) { out.write(buffer, 0, leng); } in.close(); out.close(); return "success"; }
文件下载直接贴代码:
在配置文件中的type属性使用stream作为type的结果类型
下载需要设置的参数:
contentType:
Contentlength:
inputName:指定getter定义的那个属性的名字,默认是inputStream
BufferSize:缓存大小
allowCache:是否允许缓存
contentCharSet:指定下载的字符集,在配置文件中配置一个type为stream的action
struts2配置文件
<!--下载的配置 -->
<action name="filedownload" class="com.etc.action.FileDownLoadAction" method="filedownload">
<result type="stream">
<param name="bufferSize">2048</param>
</result>
</action>
下载的代码(get,set方法记得生成)
private String contentType; private String contentDisposition; private InputStream inputStream; private long contentLength; public String filedownload() throws IOException{ contentType="text/html";//指定文件的类型 contentDisposition="attachment;filename=index.html";//下载的提示框 ServletContext servletContext=ServletActionContext.getServletContext(); //告诉文件在哪里 String filename=servletContext.getRealPath("/img/index.html"); //去读文件 inputStream=new FileInputStream(filename); contentLength=inputStream.available(); return "success"; }