struts实现文件上传和下载。
先来实现上传。
写上传不管语言,都要先注意前端的form那儿有个细节。
<form name="form1" method="POST" enctype="multipart/form-data">
即这个enctype,编码方式要加上multipart/form-data,这说明了以二进制形式传输数据(即不经过编码处理)。
要是考虑安全性,还要对MIME(Multipurpose Internet Mail Extensions,用了描述因特网内容类型的)作限制,比方说后台只接受MIME类型为图片的(image/jpeg )。
当然这样也还不是很安全,我现在认为比较安全的是,后台接收文件后,截断后缀名,并指定一个后缀名再放到指定文件夹,这样就算有人上传上来了可执行文件,后缀改了 ,那个文件夹不给执行权限,就比较安全了。
struts.xml配置
<action name="student_uploadClasSchedule" class="com.studentweb.action.StudentAction" method="uploadClasSchedule">
<!-- 下面这句即可以做到MIME类型判断 -->
<param name="fileUpload.allowedTypes">text/plain</param>
<!-- 指定文件保存路径 -->
<param name="savePath">classchedule</param>
<result name="SUCCESS" type="redirect">student_showClasSchedule.do</result>
</action>
action处理
public String uploadClasSchedule() {
uploadfile(file);
// 下面几句只是数据库处理,不用在意,文件名等等肯定得存数据库里的。
ClasSchedule cs = new ClasSchedule();
cs.setFilename(fileFileName);
std.addClasSchedule(cs);
return SUCCESS;
} public void uploadfile(File file) {
/**
* getRealPath方法就是拿到存储位置的绝对路径,savaPath是在struts.xml里配置好的。
* File.separator是操作系统的分隔符,linux/unix --- "/" ,windows --- "\\"
*/
final String dstPath = ServletActionContext.getServletContext().getRealPath(this.getSavePath()) + File.separator
+ fileFileName;
try {
//真正把文件保存到本地是这句。
FileUtils.copyFile(file, new File(dstPath));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public String getSavePath() {
return savePath;
}
下面是下载
struts.xml配置
<action name="student_downloadcs" class="com.studentweb.action.StudentAction" method="downloadcs">
<result name="success" type="stream">
<!-- 这儿设置下载文件的MIME类型,此处为docx类型,需要自行搜索配置。也可设置编码 -->
<param name="contentType">application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=ISO-8859-1</param>
<!--下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取值为targetFile的属性需要编写getTargetFile()方法 -->
<param name="inputName">targetFile</param>
<!-- attachment这个设置即提醒浏览器弹出下载或直接打开的框,fileName即返回处理过的文件名(解决中文乱码) -->
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="buffersize">4096</param>
</result>
</action>
后台处理
public String downloadcs() {
return SUCCESS;
} public InputStream getTargetFile() {
String savePath = "classchedule";
String temp = request.getParameter("filename");
savePath += File.separator + temp;
// 即以流的形式返回
return ServletActionContext.getServletContext().getResourceAsStream(savePath);
} public String getFileName() {
//接受要下载的文件名
String temp = request.getParameter("filename");
try {
temp = new String(temp.getBytes(), "ISO-8859-1"); //解决下载时中文乱码
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return temp;
}
顺便说一下删除吧,主要用的是java.io.File.File里面的方法。
后台处理,接受文件id删除的方式。
public String deleteCS() {
String temp = request.getParameter("id");
int id = Integer.valueOf(temp);
//这儿是删除数据库里的信息
String filename = std.getFile(id);
std.deleteFile(id);
//这儿是删除实际存储的文件。
String dstPath = ServletActionContext.getServletContext().getRealPath("/classchedule") + File.separator
+ filename;
File file = new File(dstPath);
System.out.println(dstPath+"////"+file.exists());
if(file.exists())
file.delete();
return "DELETEFILE";
}
/** file常用方法
* file.exists() 判断文件是否存在
* file.delete() 删除文件
* file.getParentFile().mkdirs() 在上层文件创建目录
* file.createNewFile() 创建当前文件(在存储中)
*/
struts实现文件上传和下载。的更多相关文章
- java框架篇---struts之文件上传和下载
Struts2文件上传 Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的 ...
- 【SSH2(实用文章)】--Struts2文件上传和下载的例子
回想一下,再上一篇文章Struts2实现机制,该步骤做一步一步来解决,这种决心不仅要理清再次Struts2用法.映射机制及其在深入分析.最后一个例子来介绍Struts2一种用法,这里将做一个有关文件上 ...
- Struts的文件上传下载
Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...
- java:struts框架3(自定义拦截器,token令牌,文件上传和下载(单/多))
1.自定义拦截器: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...
- 11、Struts2 的文件上传和下载
文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...
- java web学习总结(二十四) -------------------Servlet文件上传和下载的实现
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- (转载)JavaWeb学习总结(五十)——文件上传和下载
源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...
- JavaWeb学习总结,文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- java文件上传和下载
简介 文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...
随机推荐
- 以pfile或者spfile启动时show parameter pfile的不同结果
普通启动: SQL> show parameter pfile NAME TYPE VALUE ------------------------------------ ----------- ...
- springboot整合mybatis使用阿里(阿里连接池)和xml方式
源码地址:https://github.com/wuhongpu/springboot-mybatis.git 1.在pom文件中引入相关依赖包 <?xml version="1.0& ...
- Visual Studio中将打开的代码与类文件进行关联
- mac下通过mdfind命令搜索文件
mdfind命令就是Spotlight功能的终端界面,这意味着如果Spotlight被禁用,mdfind命令也将无法工作.mdfind命令非常迅速.高效.最基本的使用方法是: mdfind -name ...
- (转)iOS-Runtime知识点整理
runtime简介 因为Objc是一门动态语言,所以它总是想办法把一些决定工作从编译连接推迟到运行时.也就是说只有编译器是不够的,还需要一个运行时系统 (runtime system) 来执行编译后的 ...
- java 学习笔记之 流、文件的操作
ava 学习笔记之 流.文件的操作 对于一些基础的知识,这里不再过多的解释, 简单的文件查询过滤操作 package com.wfu.ch08; import java.io.File; import ...
- 724. Find Pivot Index
Given an array of integers nums, write a method that returns the "pivot" index of this arr ...
- python 将文件夹内的图片转换成PDF
import os import stringfrom PIL import Imagefrom reportlab.lib.pagesizes import A4, landscapefrom re ...
- 关于table布局的推荐使用原因
一.关于table布局的性能 1.table标签比其他html标签占用更多字节,导致下载时间延迟,占用服务器更多的流量资源: 2.table会阻碍浏览器渲染引擎的渲染顺序,导致页面生成的延迟,造成不良 ...
- tp3.2 事务处理
事务的机制通常被概括为“ACID”原则即原子性(A).稳定性(C).隔离性(I)和持久性(D). 原子性:构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行. 稳定性:数据库在事 ...