基于struts2的文件上传下载
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的文件上传下载相关推荐
- Struts2 文件上传,下载,删除
本文介绍了: 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用Fi ...
- 基于Struts2的文件上传
Struts2本身并没提供上传的组件,我们可以通过调用上传框架来实现文件的上传. 一.配置上传解析器 首先要配置项目的框架,也就是倒导入"struts2-core-2.2.1.jar&quo ...
- 【struts2】文件上传下载—struts2实现
struts2实现上传下载时要用到的jar包: UploadAction.java(fileupload.action) package com.rczp.action;import java.io. ...
- Struts2中文件上传下载实例
1.单文件上传 1 jsp页面: 2 3 <!-- 单文件上传 --> 4 <form action="Fileupload.action" method=&qu ...
- 基于Mongodb的文件上传下载,图片预览
1.依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-b ...
- 基于Servlet4的文件上传下载功能,原生态。
效果展现 maven依赖 为了让同学们直接引入依赖,我这里贴出了dependencies <dependencies><!-- https://mvnrepository.com/a ...
- 基于Django的文件上传下载删除管理器
这是一个基于Django的文件下载,上传,删除的任务管理器 先看看效果展示 1.运行完Django后,直接输入网址http://127.0.0.1:8000 就可以直接进去该网站 2.这是一个主图 上 ...
- 项目_功能模块_基于Spring Boot的文件上传下载功能的设计与实现
文章目录 基于Spring Boot的文件上传下载功能模块的设计与实现 1.前言 2.技术栈 3.关键源码 4.实现效果 4.1.登录 4.2.文件列表 4.3.上传文件测试 4.3.1.测试图片 4 ...
- Struts2的文件上传
基于Struts2的文件上传 struts2文件上传 转载于:https://www.cnblogs.com/passer1991/archive/2012/11/15/2771135.html
最新文章
- Windows系统错误代码解释集合
- Scala使用JUnit4单元测试
- 金融反欺诈和金融构建信用评分或者金融预测特征抽取案例
- Boost:BOOST_ASSERT_IS_VOID的测试程序
- Linux结构体变量报错,23. Linux模式设计
- 联想打印机7256显示更换墨盒_惠普打印机涉嫌垄断?只认自家“昂贵”墨盒,成本太高招架不住...
- 互联网晚报 | 1月29日 星期六 | 支付宝相互宝正式关停;大钲资本成瑞幸咖啡实控人;苹果创有史以来最高单季营收...
- knime实现python编写脚本
- AESRijndael加密
- NetBeans+xdebug解决无法连接xdebug问题
- Unity VR开发出语音识别功能
- 实现关于跨二级域名和1.1和2.0版.net Forms身份验证体制的问题和解决办法.
- Windows:定时/进程结束执行命令
- 1、前端背景图自适应
- 华为鸿蒙麒麟玉兔_鸿蒙、麒麟、鲲鹏……这是属于中华的浪漫
- 完整的微信登陆 接收消息流程
- python一入深似海-模块化编程-钢铁侠战甲(二)
- 扔掉塑料手环吧!有多高科技不重要,美才是重点
- 现在做外卖CPS晚吗?应该怎样做效果好一点?
- 【人工智能】CB Insights:2018年全球人工智能发展趋势报告