Struts 上传和下载功能

本文详细介绍了如何利用Struts框架实现单文件、多文件上传及文件下载的功能,包括配置过滤器、创建相应的Action类以及相关JSP页面的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Struts上面自带了上传和下载功能,使用非常方便

下面做一个简单的上传下载例子:


单文件上传:

首先配置Struts中核心控制器filter

web.xml


  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  3.  <display-name>StrutsUpload</display-name>
  4.  <filter>
  5.    <filter-name>Struts</filter-name>
  6.    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  7.  </filter>
  8.  <filter-mapping>
  9.    <filter-name>Struts</filter-name>
  10.    <url-pattern>/*</url-pattern>
  11.  </filter-mapping>
  12. </web-app>

action:


 
  1. package action;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import org.apache.commons.io.FileUtils;
  5. import com.opensymphony.xwork2.ActionSupport;
  6. /**
  7. * @Author:Z.J.
  8. * @Date:2016年3月14日 下午8:38:06
  9. * 说明
  10. */
  11. public class FileUpLoadAction extends ActionSupport {
  12. private static final long serialVersionUID = 1L;
  13. private File file;//文件,与页面中input的name一定要保持一致
  14. private String fileFileName;
  15. private String fileContentType;
  16. private String fileDescript;
  17. public String upload(){
  18. System.out.println("上传功能");
  19. System.out.println(file);
  20. System.out.println(fileFileName);
  21. System.out.println(fileContentType);
  22. System.out.println(fileDescript);
  23. //保存文件
  24. try {
  25. FileUtils.copyFile(file, new File("/Users/zjing/ZWorkspace/zjImage/"+fileFileName));
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. }
  29. return SUCCESS;
  30. }
  31. public File getFile() {
  32. return file;
  33. }
  34. public void setFile(File file) {
  35. this.file = file;
  36. }
  37. public String getFileFileName() {
  38. return fileFileName;
  39. }
  40. public void setFileFileName(String fileFileName) {
  41. this.fileFileName = fileFileName;
  42. }
  43. public String getFileContentType() {
  44. return fileContentType;
  45. }
  46. public void setFileContentType(String fileContentType) {
  47. this.fileContentType = fileContentType;
  48. }
  49. public String getFileDescript() {
  50. return fileDescript;
  51. }
  52. public void setFileDescript(String fileDescript) {
  53. this.fileDescript = fileDescript;
  54. }
  55. }

jsp页面:


 
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.    pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>上传</title>
  8. </head>
  9. <body>
  10. <form action="upload" method="post" enctype="multipart/form-data">
  11. 文件:<input type="file" name="file"/><br/>
  12. 描述:<input type="text" name="fileDescript"/><br/>
  13. <input type="submit" value="上传"/>
  14. </form>
  15. </body>
  16. </html>

 
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.    pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>上传成功</title>
  8. </head>
  9. <body>
  10. <h3>上传成功!</h3>
  11. </body>
  12. </html>

index.jsp

struts.xml 配置


 
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "struts-2.3.dtd" >
  3. <struts>
  4. <!-- 修改临时文件目录 -->
  5. <constant name="struts.multipart.saveDir" value="/Users/zjing/ZWorkspace/zjTemp"></constant>


  1. <package name="file" namespace="/" extends="struts-default" >
  2. <!-- 单文件上传 -->
  3. <action name="upload" class="action.FileUpLoadAction" method="upload">
  4.    <result>/index.jsp</result>
  5. </action>


  1. </package>
  2. </struts>


多文件上传:


  
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.    pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>多文件上传</title>
  8. </head>
  9. <body>
  10. <form action="upload2" method="post" enctype="multipart/form-data">
  11. 文件1:<input type="file" name="file"/><br/>
  12. 文件2:<input type="file" name="file"/><br/>
  13. 文件3:<input type="file" name="file"/><br/>
  14. 描述:<input type="text" name="descript"/>
  15. <br/>
  16. <input type="submit" value="上传"/>
  17. </form>
  18. </body>
  19. </html>

action


  
  1. package action;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import org.apache.commons.io.FileUtils;
  5. import com.opensymphony.xwork2.ActionSupport;
  6. /**
  7. * @Author:Z.J.
  8. * @Date:2016年3月14日 下午9:13:44
  9. * 多文件上传
  10. */
  11. public class MultiUploadAction extends ActionSupport{
  12. private static final long serialVersionUID = 1L;
  13. private File[] file;
  14. private String[] fileFileName;
  15. private String[] fileContentType;
  16. private String descript;
  17. //多文件上传
  18. public String multiUpload() throws IOException{
  19. if (file!=null) {
  20. for (int i = 0; i < file.length; i++) {
  21. System.out.println(file[i]);
  22. System.out.println(fileFileName[i]);
  23. System.out.println(fileContentType[i]);
  24. //保存文件
  25. FileUtils.copyFile(file[i], new File("/Users/zjing/ZWorkspace/zjImage/"+fileFileName[i]));
  26. }
  27. System.out.println(descript);
  28. }
  29. return SUCCESS;
  30. }
  31. public File[] getFile() {
  32. return file;
  33. }
  34. public void setFile(File[] file) {
  35. this.file = file;
  36. }
  37. public String[] getFileFileName() {
  38. return fileFileName;
  39. }
  40. public void setFileFileName(String[] fileFileName) {
  41. this.fileFileName = fileFileName;
  42. }
  43. public String[] getFileContentType() {
  44. return fileContentType;
  45. }
  46. public void setFileContentType(String[] fileContentType) {
  47. this.fileContentType = fileContentType;
  48. }
  49. public String getDescript() {
  50. return descript;
  51. }
  52. public void setDescript(String descript) {
  53. this.descript = descript;
  54. }
  55. }

配置action:


  
  1. <!-- 多文件上传 -->
  2. <action name="upload2" class="action.MultiUploadAction" method="multiUpload">
  3. <result>/index.jsp</result>
  4. </action>


Struts下载

action


  
  1. package action;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.InputStream;
  6. import com.opensymphony.xwork2.ActionSupport;
  7. /**
  8. * @Author:Z.J.
  9. * @Date:2016年3月15日 下午8:50:20
  10. * 下载的action
  11. */
  12. public class DownLoadAction extends ActionSupport{
  13. private static final long serialVersionUID = 1L;
  14. //用于保存文件名
  15. private String fileName;
  16. //下载的方法
  17. public String down() throws Exception{
  18. System.out.println("下载文件");
  19. return "down";//发出二进制数据流
  20. }
  21. //给SteamResult的inputName 属性提供一个getter方法,用于返回输入流
  22. public InputStream getFileStream(){
  23. try {
  24. File file =  new File("/Users/zjing/ZJ壁纸/hualu.jpg");
  25. fileName = file.getName();
  26. FileInputStream fis = new FileInputStream(file);
  27. return fis;
  28. } catch (FileNotFoundException e) {
  29. e.printStackTrace();
  30. throw new RuntimeException(e);
  31. }
  32. }
  33. //提供一个getter方法用于给struts.xml 文件获取文件名
  34. public String getFileName() {
  35. return fileName;
  36. }
  37. }

在struts.xml中配置action


  
  1. <!-- 文件下载 -->
  2. <action name="down" class="action.DownLoadAction" method="down">
  3. <result name="down" type="stream">
  4. <!-- 下载的文件类型:通用的可以使用二进制类型 -->
  5. <param name="contentType">application/octet-stream</param>
  6. <!-- 下载的提示框 -->
  7. <param name="contentDisposition">attachment;filename=${fileName}</param>
  8. <!-- 需要下载的文件输入流 -->
  9. <param name="inputName">fileStream</param>
  10. <!-- 缓存区大小 -->
  11. <param name="bufferSize">512</param>
  12. </result>
  13. </action>







转载于:https://www.cnblogs.com/zjero/p/5287879.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值