使用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>