一 文件上传
1.环境要求
commons-fileupload-xxx.jar
commons-io-xxx.jar
2.准备jsp页面
单
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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>
</head>
<body>
<s:form action="Fileupload" method="" enctype="multipart/form-data">
<s:textfield name="title" label="用户名"/><br>
<s:file name="upload" label="上传文件"/><br>
<s:submit name="submit" value="上传" />
</s:form>
</body>
</html>
多
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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>
</head>
<body>
<s:form action="FileuploadMore" method="post" enctype="multipart/form-data">
<s:textfield name="title" label="用户名"/><br>
<s:file name="upload" label="上传文件"/><br>
<s:file name="upload" label="上传文件"/><br>
<s:file name="upload" label="上传文件"/><br>
<s:file name="upload" label="上传文件"/><br>
<s:submit name="submit" value="上传" />
</s:form>
</body>
</html>
3.Action页面
单
package com.icss.action.upload;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
***************************
*@类名 UploadAction.java
public class UploadAction extends ActionSupport{
//1.普通字段name属性名
private String title;
private File upload;//file 控件名 它要和表单name属性和action属性名要一致
//2.控件名+ContentType
private String uploadContentType;//上传文件的类型
//3.控件名+FileName
private String uploadFileName;//上传文件的名称
//4.上传文件的路径 upload
private String savePath; //获取完整的路径
//上传
public String execute() throws Exception {
byte[] buffer = new byte[2048];//缓冲区
//输入流
FileInputStream fis = new FileInputStream(upload);
//输出流 \ \
FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+uploadFileName);
int len=fis.read(buffer);
while(len>0){
fos.write(buffer, 0, len);
len=fis.read(buffer);
}
fos.flush();
fos.close();
fis.close();
return "success";
}
//生成get和set方法
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 getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getSavePath() {
return ServletActionContext.getServletContext().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
}
多
public class UploadMoreAction extends ActionSupport{ //file 控件 name 属性和action属性名要一致 //1.普通字段name属性名 private String title; private File[] upload; //2.控件名+ContentType private String[] uploadContentType;//上传文件的类型 //3.控件名+FileName private String[] uploadFileName;//上传文件的名称 //4.上传文件的路径 upload private String savePath; //获取完整的路径 //上传 public String execute() throws Exception { byte[] buffer = new byte[2048];//缓冲区 for(int i=0;i<upload.length;i++){ //输入流 FileInputStream fis = new FileInputStream(upload[i]); //输出流 \ \ FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+uploadFileName[i]); int len=fis.read(buffer); while(len>0){ fos.write(buffer, 0, len); len=fis.read(buffer); } fos.flush(); fos.close(); fis.close(); } return "success"; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getSavePath() { return ServletActionContext.getServletContext().getRealPath(savePath); } public void setSavePath(String savePath) { this.savePath = savePath; } public File[] getUpload() { return upload; } public void setUpload(File[] upload) { this.upload = upload; } public String[] getUploadContentType() { return uploadContentType; } public void setUploadContentType(String[] uploadContentType) { this.uploadContentType = uploadContentType; } public String[] getUploadFileName() { return uploadFileName; } public void setUploadFileName(String[] uploadFileName) { this.uploadFileName = uploadFileName; }
4.配置struts.xml文件
File类型的xxx属性,与表单中的File控件的name属性一致,用于封装File控件对应的文件内容<?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.devMode" value="false"/> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <constant name="struts.configuration.xml.reload" value="true"/> <package name="upload" namespace="/" extends="struts-default"> <!-- 单文件上传 --> <action name="Fileupload" class="com.icss.action.upload.UploadAction"> <param name="savePath">/upload</param> <result name="success">/upload_success.jsp</result> </action> <!-- 多文件上传配置 --> <action name="FileuploadMore" class="com.icss.action.upload.UploadMoreAction"> <param name="savePath">/upload</param> <result name="success">/upload_success.jsp</result> </action> <!-- 下载文件 --> <action name="download" class="com.icss.action.upload.downloadAction"> <param name="inputPath">/upload</param> <result name="success" type="stream"> <param name="contentType">application/octet-stream</param> <param name="inputname">inputStream</param> <param name="contentDisposition"> attachment;filename="${fileName}" </param> <param name="bufferSize">4096</param> </result> </action> </package> </struts>
String类型的xxxFileName属性,该属性名称就是前面的File类型属性+FileName组合而成,是固定的语法,作用就是封装File控件对应文件的文件名
String类型的xxxContentType属性,同样也是xxx属性+ContentType组合而成,固定语法,作用就是封装File控件对应文件的文件类型
在Action中设置了这三个属性,在执行上传时就可以直接通过getXxx()方法来获取到上传文件的文件名、类型及文件内容。
而实现文件上传的过程就是使用流实现文件读取的过程,
二 文件下载
jsp:
2.Action<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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> </head> <body> <a href="download?fileName=head.jpg">下载此图片</a> </body> </html>
struts.xml在上面。public class downloadAction extends ActionSupport { //下载路劲 private String inputPath; //下载文件名 private String fileName; //读取下载文件的流 private InputStream inputname; //获取输入流 public InputStream getInputName() throws FileNotFoundException { String path = ServletActionContext.getServletContext().getRealPath(inputPath); return new BufferedInputStream(new FileInputStream(path+"\\"+fileName)); } public String getInputPath() { return inputPath; } public void setInputPath(String inputPath) { this.inputPath = inputPath; } public String getFileName() { return fileName; } public void setFilename(String fileName) { this.fileName = fileName; } public void setInputName(InputStream inputName) { this.inputname = inputName; } public String execute() throws Exception { return SUCCESS; } }