struts文件上传和下载
文件上传
jsp中
<a href="/file/new.action">文件上传案例</a>
fileaction中
@Override
public String execute() throws Exception {
return SUCCESS;
}
配置xml,记得在struts.xml中导入这个xml,
<constant name="struts.multipart.maxSize" value="10485760"/>是修改默认文件上传大小限制
<struts>
<package name="filePackage" extends="basePackage" namespace="/file">
<!--没有method默认调用execute-->
<action name="new" class="com.kaishengit.action.FileAction">
<result>/WEB-INF/views/file/upload.jsp</result>
</action>
<action name="upload" class="com.kaishengit.action.FileAction" method="upload">
<result type="redirectAction">
<param name="actionName">new</param>
<param name="namespace">/file</param>
</result>
</action>
<action name="download" class="com.kaishengit.action.FileAction" method="download">
<result type="stream">
<param name="contentType">${downloadType}</param>
<!--
<param name="contentLength"></param>
-->
<param name="contentDisposition">attachment;filename="${downloadName}"</param>
<param name="inputName">downloadFile</param>
<param name="bufferSize">2048</param>
<param name="allowCaching">true</param>
<param name="contentCharSet">UTF-8</param>
</result>
</action>
</package>
</struts>
跳转到/WEB-INF/views/file/upload.jsp这个jsp中的form表单
action中即使没有doget和dopost方式也要写post提交,但在搜索的时候的form表单中是用get提交
文件上传的时候必须要写enctype="multipart/form-data" 否则用strut2会报错说没有什么input视图
要切记
<form action="/file/upload.action" method="post" enctype="multipart/form-data">
<input type="text" name="title">
<input type="file" name="pic">
<input type="file" name="pic">
<input type="file" name="pic">
<button>保存</button>
</form>
通过配置项来到upload方法中
public String upload() {
/*private File pic;等
记得生成get和set
*/
//System.out.println("Title:" + title);
//这个时候获得的是上传缓存的名字,看不懂
//System.out.println("file:" + pic.getName());
/*这里才是获得文件名字,是使用了约定
private String picFileName
表单file名字+FileName;生成get set*/
//System.out.println("file:" + picFileName);
/*这里才是获得文件类型,是使用了约定
private String picContentType
表单file名字+ContentType;生成get set*/
//System.out.println("type:" + picContentType);
try {
//单文件上传
IOUtils.copy(new FileInputStream(pic), new FileOutputStream(new File("C:/upload",fileName)));
/*多文件上传时
<input type="file" name="pic">
<input type="file" name="pic">
<input type="file" name="pic">
用数组或者集合的形式接收
private List<File> pic;
private List<String> picFileName;
private List<String> picContentType;*/
for(int i = 0;i < pic.size();i++) {
File file = pic.get(i);
String fileName = picFileName.get(i);
IOUtils.copy(new FileInputStream(file), new FileOutputStream(new File("C:/upload",fileName)));
}
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
文件下载
方法一:
jsp中
<a href="/file/download.action">下载文件</a>
Fileaction中 获取response
public String download(){
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/pdf");
OutputStream out = response.getOutputStream();
InputStream in = new FileInputStream(new File("c:/xx.pdf"));
IOUtils.copy(in,out);
out.flush();
out.close();
in.close();
return NONE;
}
可以写在basicAction中,不用每次都写一遍,然后在Fileaction中传入路径即可
public void downloadFile(String filePath) throws Exception{
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/pdf");
OutputStream out = response.getOutputStream();
InputStream in = new FileInputStream(new File(filePath));
IOUtils.copy(in,out);
out.flush();
out.close();
in.close();
}
但是我们下载的格式不是固定的,可以定义一个map集合,根据后缀名判断
在basicAction中
public static Map<String,String> mimeType = new HashMap<String, String>();
static {
mimeType.put(".pdf", "application/pdf");
mimeType.put(".json", "application/json");
mimeType.put(".doc","application/msword");
mimeType.put(".jpg","image/jpeg");
mimeType.put(".jpeg","image/jpeg");
mimeType.put(".jpe","image/jpeg");
mimeType.put(".xls","application/vnd.ms-excel");
mimeType.put(".zip","application/zip");
mimeType.put(".wps","application/vnd.ms-works");
mimeType.put(".gif","image/gif");
mimeType.put(".mp3","audio/mpeg");
//application/octet-stream
} public void downloadFile(String filePath,String downloadFileName) throws Exception{
HttpServletResponse response = getResponse(); downloadFileName = new String(downloadFileName.getBytes("UTF-8"),"ISO8859-1");
// 设置下载文件的名字
response.addHeader("contentDisposition", "attachment;filename=\""+downloadFileName+"\""); String fileType = filePath.substring(filePath.lastIndexOf("."));
if(mimeType.containsKey(fileType)) {
response.setContentType(mimeType.get(fileType));
} else {
//没有的话就认为是2进制
response.setContentType("application/octet-stream");
} OutputStream out = response.getOutputStream();
InputStream in = new FileInputStream(new File(filePath)); IOUtils.copy(in, out);
out.flush();
out.close();
in.close();
}
方法二
Fileaction中
public String download() throws Exception {
downloadType = "application/pdf";
downloadName = new String("缓存.pdf".getBytes("UTF-8"),"ISO8859-1");
//return了一个success.需要在xml中配置一个返回值是stream
return SUCCESS;
}
public InputStream getDownloadFile() throws Exception {
return new FileInputStream("C:/upload/065-cache.pdf");
}
struts-file.xml中
<action name="download" class="com.kaishengit.action.FileAction" method="download">
<result type="stream">
<param name="contentType">${downloadType}</param>
<!-- 进度条
<param name="contentLength"></param>
-->
<!--下载框--><param name="contentDisposition">attachment;filename="${downloadName}"</param>
<!--给一个输入流,需要在FileAction中配置一个方法获取输入流,返回值是InputStream
方法名为get开头,param里面的参数为去掉get后首字母小写的结果-->
<param name="inputName">downloadFile</param>
<param name="bufferSize">2048</param>
<param name="allowCaching">true</param>
<param name="contentCharSet">UTF-8</param>
</result>
</action>
-------------------------------------------------------------------------
-------------------------------------------------------------------------
这里再讲一个struts中常用的返回形式json
方法1:使用常用的返回方式返回json,首先在pom里添加对gson的导入
public class JSONAction extends BasicAction{
private static final long serialVersionUID = 1L;
@Override
public String execute() throws Exception {
/*在basic中提供renderJSON
public void renderJSON(Object obj) throws Exception {
HttpServletResponse response = getResponse();
response.setContentType("application/json;charset=UTF-8");
Gson gson = new Gson();
String json = gson.toJson(obj);
PrintWriter out = response.getWriter();
out.print(json);
out.flush();
out.close();
}
*/
Map<String, Object> map = new HashMap<String, Object>();
map.put("state", "success");
map.put("result", "OK");
renderJSON(map);
return NONE;
}
}
struts-json中 要继承json-default
<package name="jsonPackage" extends="basePackage,json-default" namespace="/json">
<action name="product" class="com.kaishengit.action.JSONAction"> </action>
</package>
方法2:使用插件返回
导入struts-json-plugin,必须和struts-core的版本一致
public class JSONAction extends BasicAction{
private static final long serialVersionUID = 1L;
private Map<String, Object> map;
@Override
public String execute() throws Exception {
map = new HashMap<String, Object>();
map.put("id", 1001);
map.put("name", "Jerry");
map.put("address", "中国河南省");
return SUCCESS;
}
//get set
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
}
struts-json中
extends="basePackage,json-default"多继承
<package name="jsonPackage" extends="basePackage,json-default" namespace="/json">
<action name="product" class="com.kaishengit.action.JSONAction">
<!--插件中定义了新的返回值json-->
<result name="success" type="json">
<!--root默认是一个action,会把里面所有的属性都转换成json--
修改成map后只转化里面的map-->
<param name="root">map</param>
<param name="enableGZIP">true</param>压缩,传输快
<param name="noCache">true</param>不缓存
<param name="excludeNullProperties">true</param>排除没有值的属性,不生成json
<param name="contentType">application/JSON</param>
<param name="encoding">UTF-8</param>
</result>
</action>
</package>
struts文件上传和下载的更多相关文章
- Java Struts文件上传和下载详解
Struts2文件上传 Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的 ...
- java:struts框架3(自定义拦截器,token令牌,文件上传和下载(单/多))
1.自定义拦截器: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...
- java web学习总结(二十四) -------------------Servlet文件上传和下载的实现
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- Struts2入门(七)——Struts2的文件上传和下载
一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST" ...
- (转载)JavaWeb学习总结(五十)——文件上传和下载
源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...
- JavaWeb学习总结,文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- java文件上传和下载
简介 文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...
- JavaWeb学习总结(五十)——文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- Struts2 之 实现文件上传和下载
Struts2 之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...
随机推荐
- java字符串函数及理解
Java中的字符串也是一连串的字符.但是与许多其他的计算机语言将字符串作为字符数组处理不同,Java将字符串作为String类型对象来处理.将字符串作为内置的对象处理允许Java提供十分丰富的功能特性 ...
- Linux操作系统定时任务系统Cron入门、PHP计划任务以及rpc示例
一.简单介绍 1.cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务: servic ...
- 【玩转Ubuntu】04. Ubuntu上配置git环境
1. 使用PPA安装Git PPA,表示 Personal Package Archives,也就是个人软件包集. 有很多软件因为种种原因,不能进入官方的 Ubuntu 软件仓库. 为了方便 Ubun ...
- Swift中类的初始化器与继承
初始化是类,结构体和枚举类型实例化的准备阶段.这个阶段设置这个实例存储的属性的初始化数值和做一些使用实例之前的准备以及必须要做的其他一些设置工作. 通过定义构造器(initializers)实现这个实 ...
- Android视频应用去广告学习实践
注意:本文仅仅供学习研究用途 第一步 素材搜集 腾讯视频应用:http://download.csdn.net/detail/itleaks/7991795 反汇编工具: ...
- Jquery的一些简单使用记录
//平滑滚动到底部 $(".list").scrollTo('100%', '100%', { easing: 'swing' }); //直接滚动至底部(无效果) $('.lis ...
- 最近用的到的一些js的常用方法(简单的)
由于新的项目开始了,是使用MVC 5.0 开发的,前端使用了两个主流的框架 UIKIT,Ignite UI(收费) 因为是mvc主要用json来交互,不能避免要对前端脚本进行操作,所以就将能用到的方法 ...
- jvm监控命令介绍
1.jstack介绍 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在 ...
- 删除链表的中间节点和a/b处节点
[说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中“删除链表的中间节点和a/b处节点”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解析说 ...
- php学习笔记(3)
1.计数器 <?php /* simple access counter for php3 (c)1998 David W. Bettis dbettis@eyeintegrated.com m ...