使用Struts2实现文件的上传与下载apache
1:上传app
Jsp代码:jsp
<s:form action="updown" method="post" enctype="multipart/form-data">ide
上传文件:<input type="file" name="upload"><br>post
Action代码:this
public class UpDownAction extends ActionSupport {spa
private File upload;//与前台上传的文件名称一致orm
private String uploadContentType;// 前缀必须是uploadxml
private String result;ip
private String uploadFileName;//必须注意后缀必须是FileName,前缀必须是upload
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
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;
}
@Override
public String execute() throws Exception {
//获取上传文件路径
System.out.println(upload);
String path=ServletActionContext.getServletContext().getRealPath("/images");
File files=new File(path);
System.out.println("fdad"+files);
//判断文件路径是否存在,不存在则建立
if(!files.exists()){
files.mkdir();
}
//upload源文件的名称
//upfileName与建立的名称保持一致
FileUtils.copyFile(upload, new File(files,uploadFileName));
result="上传成功";
return "ok";
}
}
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.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.multipart.saveDir" value="/tmp"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="updown" class="com.soft. UpDownAction ">
<result name="ok" >up.jsp</result>
<!-- 配置拦截器限制上传文件类型及大小 -->
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/x-png,image/gif,image/jpeg</param>
<param name="maximumSize">5M</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
</struts>
文件的下载:
Jsp代码:
<a href=”down?filename=4.jpg”>下载</a>
Action代码(命名要与struts.xml保持一致,不然怎是不成功)
public class Downfile extends ActionSupport {
public String inputPath;
public String filename;
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public String getInputPath() {
return inputPath;
}
public void setInputPath(String inputPath) {
this.inputPath = inputPath;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(inputPath);
return "hi";
}
public class Downfile extends ActionSupport {
public String inputPath;//与struts.xm保持一致
public String filename;
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public String getInputPath() {
return inputPath;
}
public void setInputPath(String inputPath) {
this.inputPath = inputPath;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(inputPath);
return "hi";
}
public InputStream getInputStream() throws IOException{
//return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
String path=ServletActionContext.getServletContext().getRealPath("/images");
String filepath=path+"\\"+filename;
File file=new File(filepath);
return FileUtils.openInputStream(file);
}
public String getDownloadFileName(){
return "a.jpg";
}
}
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.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.multipart.saveDir" value="/tmp"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="down" class="com.soft.Downfile">
<result name="hi" type="stream"></result>//必须写type,不然没法下载
<param name="inputPath">/images/4.jpg</param>
<param name="contentType">application/octet-stream</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
<param name="bufferSize">10000</param>
</action>
</package>
</struts>