1.struts.xml

 1 <struts>
 2     <constant name="struts.multipart.maxSize" value="209715200" /><!-- 设置文件上传大小,2097152=2M -->
 3     <package name="action" extends="struts-default" namespace="/">
 4         <!-- 文件上传 -->
 5         <action name="upload" class="com.fileupload.action.UploadAction" method="execute">
 6             <result name="success">load_success.jsp</result><!-- 文件上传成功后跳转页面 -->
 7             <result name="message">/message.jsp</result><!-- 上传失败跳转页面 -->
 8             <interceptor-ref name="defaultStack">
 9                 <param name="fileUpload.allowedExtensions">jpg,png</param><!-- 设置上传格式 -->
10             </interceptor-ref>
11         </action>
12         <!-- 文件下载 -->
13         <action name="download" class="com.fileupload.action.DownloadAction" method="execute">
14             <result type="stream">
15                 <param name="inputName">is</param> <!-- 指定返回流的名字 -->
16                 <param name="contentType">application/pdf/jpg</param><!-- 指定返会数据的类型 -->
17                 <param name="contentDisposition">attachement;filename=${fileName}</param><!-- 指定用户下载的文件的类型和名称 -->
18             </result>
19         </action>
20     </package>
21 </struts>

2.上传action

 1 import java.io.File;
 2 import java.io.IOException;
 3 import org.apache.commons.io.FileUtils;
 4 import org.apache.struts2.ServletActionContext;
 5
 6 public class UploadAction {
 7     private File img; //文件
 8     private String imgFileName;  //文件名:文件+FileName
 9
10     public String execute() throws IOException{
11
12         if(img != null){
13         String path = ServletActionContext.getServletContext().getRealPath("/images");
14         File destFile = new File(path, imgFileName);
15         FileUtils.copyFile(img, destFile);
16         return "success";
17         }
18         return "message";
19     }
20
21     public File getImg() {
22         return img;
23     }
24     public void setImg(File img) {
25         this.img = img;
26     }
27     public String getImgFileName() {
28         return imgFileName;
29     }
30     public void setImgFileName(String imgFileName) {
31         this.imgFileName = imgFileName;
32     }
33 }

3.下载action

import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.apache.struts2.ServletActionContext;public class DownloadAction {private InputStream is;  //输入流,先将文件读入服务端的内存private String fileName; //随意    public String execute() throws FileNotFoundException, UnsupportedEncodingException{fileName = "1.png";//设置路径,在项目中通过连接DB获取文件名is = ServletActionContext.getServletContext().getResourceAsStream("/images/"+fileName);//获得文件流     byte[] bytes = fileName.getBytes("utf-8");     fileName = new String(bytes, "iso-8859-1");
        return "success";}public InputStream getIs() {return is;}public void setIs(InputStream is) {this.is = is;}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}
}

[注意]:

1. 下载时出现500:Can not find a java.io.InputStream with the name [is] in the invocation stack. Check the <param nam

  解决思路:1)查看is输入流是否为null,若为空则没有获取到正确路径,检查文件名是否正确

         2)在action中没有写配置文件中"<param name="inputName">"后面属性的那个get方法

         3)当采用 return ServletActionContext.getServletContext().getResourceAsStream("...") 这种方法获得输入流的时候,要保证文件位置在 ServletContext 当中,就是说要在当前的应用上下文中,如果想要获得外部文件 譬如 D盘中的某个文件,那么就要自己创建输入流才可以,如:

File file = new File("D://spring.doc");
InputStream is = new FileInputStream(file);
return is; 

2.编码问题

  tomcat服务器端的编码是utf-8,通常情况下不用fileName = new String(fileName.getBytes("iso-8859-1"),"UTF-8");设置编码,而在输出端使用

byte[] bytes = fileName.getBytes("utf-8");
fileName = new String(bytes, "iso-8859-1");

设置编码,编码类型和浏览器端编码类型有关

转载于:https://www.cnblogs.com/Viveza/p/5895420.html

基于struts2的文件上传下载相关推荐

  1. Struts2 文件上传,下载,删除

    本文介绍了: 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用Fi ...

  2. 基于Struts2的文件上传

    Struts2本身并没提供上传的组件,我们可以通过调用上传框架来实现文件的上传. 一.配置上传解析器 首先要配置项目的框架,也就是倒导入"struts2-core-2.2.1.jar&quo ...

  3. 【struts2】文件上传下载—struts2实现

    struts2实现上传下载时要用到的jar包: UploadAction.java(fileupload.action) package com.rczp.action;import java.io. ...

  4. Struts2中文件上传下载实例

    1.单文件上传 1 jsp页面: 2 3 <!-- 单文件上传 --> 4 <form action="Fileupload.action" method=&qu ...

  5. 基于Mongodb的文件上传下载,图片预览

    1.依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-b ...

  6. 基于Servlet4的文件上传下载功能,原生态。

    效果展现 maven依赖 为了让同学们直接引入依赖,我这里贴出了dependencies <dependencies><!-- https://mvnrepository.com/a ...

  7. 基于Django的文件上传下载删除管理器

    这是一个基于Django的文件下载,上传,删除的任务管理器 先看看效果展示 1.运行完Django后,直接输入网址http://127.0.0.1:8000 就可以直接进去该网站 2.这是一个主图 上 ...

  8. 项目_功能模块_基于Spring Boot的文件上传下载功能的设计与实现

    文章目录 基于Spring Boot的文件上传下载功能模块的设计与实现 1.前言 2.技术栈 3.关键源码 4.实现效果 4.1.登录 4.2.文件列表 4.3.上传文件测试 4.3.1.测试图片 4 ...

  9. Struts2的文件上传

    基于Struts2的文件上传 struts2文件上传 转载于:https://www.cnblogs.com/passer1991/archive/2012/11/15/2771135.html

最新文章

  1. Windows系统错误代码解释集合
  2. Scala使用JUnit4单元测试
  3. 金融反欺诈和金融构建信用评分或者金融预测特征抽取案例
  4. Boost:BOOST_ASSERT_IS_VOID的测试程序
  5. Linux结构体变量报错,23. Linux模式设计
  6. 联想打印机7256显示更换墨盒_惠普打印机涉嫌垄断?只认自家“昂贵”墨盒,成本太高招架不住...
  7. 互联网晚报 | 1月29日 星期六 | 支付宝相互宝正式关停;大钲资本成瑞幸咖啡实控人;苹果创有史以来最高单季营收...
  8. knime实现python编写脚本
  9. AESRijndael加密
  10. NetBeans+xdebug解决无法连接xdebug问题
  11. Unity VR开发出语音识别功能
  12. 实现关于跨二级域名和1.1和2.0版.net Forms身份验证体制的问题和解决办法.
  13. Windows:定时/进程结束执行命令
  14. 1、前端背景图自适应
  15. 华为鸿蒙麒麟玉兔_鸿蒙、麒麟、鲲鹏……这是属于中华的浪漫
  16. 完整的微信登陆 接收消息流程
  17. python一入深似海-模块化编程-钢铁侠战甲(二)
  18. 扔掉塑料手环吧!有多高科技不重要,美才是重点
  19. 现在做外卖CPS晚吗?应该怎样做效果好一点?
  20. 【人工智能】CB Insights:2018年全球人工智能发展趋势报告

热门文章

  1. 戴尔发布面向制造、生命科学和研究的高性能计算系统
  2. jpa postgresql 使用uuid作为主键
  3. 2016年3月23日作业
  4. ToolBarTray与ToolBarPanel的区别
  5. Java多线程 - 线程组
  6. WPF案例:如何设计历史记录查看UI
  7. android 6.0权限
  8. 为什么vue前端项目要使用nodejs
  9. TensorFlow系列(一):TensorFlow是什么
  10. Flutter入门:application、module、package、plugin