首先要引入:commons-fileupload-xxx.jar和commons-io-xxx.jar兩個jar包
1.前臺index.jsp頁面:
<html>
<head>
<title>文件上傳與下載</title>
<script type="text/javascript" src="/js/jquery-1.3.js"></script>
</head>
<body>
<form action="upload.action" method="post" enctype="multipart/form-data">
<input type="file" name="uploadFile.upload"/>
<input type="submit" value="提交"/>
</form><br>
<a href="download.action?fileName=${message}">下載${message}</a>
</body>
</html>
2.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>
<package name="FileUpload" extends="json-default">
<!-- 文件上傳 -->
<action name="upload" class="com.fileupload.UploadAction">
<result name="success">/index.jsp</result>
</action>
<!-- 文件下載 -->
<action name="download" class="com.fileupload.DownLoadAction">
<result name="succ" type="stream">
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
<param name="inputName">downloadFile</param>
<param name="contentDisposition">attachment;filename=${fileName}</param>
<param name="bufferSize">8192</param>
</result>
</action>
</package>
</struts>
3.上傳的action:
public class UploadAction extends ActionSupport {
private UploadFile uploadFile;
private FileUploadUtil fileUploadUtil =new FileUploadUtil();
public String execute(){
Map session=ActionContext.getContext().getSession();
System.out.println("文件:"+uploadFile.getFile());
System.out.println("文件名稱:"+uploadFile.getFileName());
System.out.println("相應類型:"+uploadFile.getContentType());
try {
// String destPath = ServletActionContext.getServletContext().getRealPath("/uploads");
// File dest = new File(destPath, uploadFile.getFileName()); //服務器的文件
// FileUtils.copyFile(uploadFile.getFile(), dest);//完成了文件的拷貝工作
String fileName=fileUploadUtil.uploadFile(uploadFile);
session.put("message",fileName);
} catch (Exception e) {
session.put("message","上傳失敗!");
e.printStackTrace();
}
return "success";
}
public UploadFile getUploadFile() {
return uploadFile;
}
public void setUploadFile(UploadFile uploadFile) {
this.uploadFile = uploadFile;
}
}
4.下載的action:
public class DownLoadAction extends ActionSupport{
private String basePath=ServletActionContext.getServletContext().getRealPath("/uploads/");
private String fileName;
public String execute(){
return "succ";
}
public InputStream getDownloadFile(){
return ServletActionContext.getServletContext().getResourceAsStream("/uploads/"+fileName);
}
public String getFileName() throws UnsupportedEncodingException{
return new String(fileName.getBytes(),"ISO-8859-1");
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
5.上傳文件的工具類FileUploadUtil:
public class FileUploadUtil {
private String filePath;
public void setFilePath(String filePath){
this.filePath=filePath;
}
//1.通過文件獲取擴展名
private String getFileExt(String fileName){
return FilenameUtils.getExtension(fileName);
}
//2.生成UUID隨機數,作爲新的文件名
private String newFileName(String fileName){
String newName=UUID.randomUUID().toString() + "." +getFileExt(fileName);
System.out.println("文件新名稱:"+newName);
return newName;
}
//3.實現文件上傳的功能,返回上傳後新的文件名稱
public String uploadFile(UploadFile uploadFile){
//獲取新的文件名
String newFileName=newFileName(uploadFile.getFileName());
try {
this.setFilePath(ServletActionContext.getServletContext().getRealPath("/uploads"));
System.out.println("文件上傳的路徑:"+filePath);
FileUtils.copyFile(uploadFile.getFile(), new File(filePath, newFileName));
return newFileName;
} catch (Exception e) {
throw new RuntimeException();
} finally{
uploadFile.getFile().delete();
}
}
}
6.文件的實體類UploadFile:
public class UploadFile {
private File file;
private String contentType;
private String fileName;
public File getFile() {
return file;
}
public String getContentType() {
return contentType;
}
public String getFileName() {
return fileName;
}
public void setUpload(File file) {
this.file = file;
}
public void setUploadContentType(String contentType) {
this.contentType = contentType;
}
public void setUploadFileName(String fileName) {
this.fileName = fileName;
}
}