先来实现上传。

写上传不管语言,都要先注意前端的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实现文件上传和下载。的更多相关文章

  1. java框架篇---struts之文件上传和下载

    Struts2文件上传 Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的 ...

  2. 【SSH2(实用文章)】--Struts2文件上传和下载的例子

    回想一下,再上一篇文章Struts2实现机制,该步骤做一步一步来解决,这种决心不仅要理清再次Struts2用法.映射机制及其在深入分析.最后一个例子来介绍Struts2一种用法,这里将做一个有关文件上 ...

  3. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

  4. java:struts框架3(自定义拦截器,token令牌,文件上传和下载(单/多))

    1.自定义拦截器: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...

  5. 11、Struts2 的文件上传和下载

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

  6. java web学习总结(二十四) -------------------Servlet文件上传和下载的实现

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  7. (转载)JavaWeb学习总结(五十)——文件上传和下载

    源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...

  8. JavaWeb学习总结,文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  9. java文件上传和下载

    简介 文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...

随机推荐

  1. Amicable numbers -- Javascript 实现

    问题描写叙述: Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide eve ...

  2. 三、Spring Boot 多数据源配置

    下面一个Java类是已经写好的根据配置文件动态创建多dataSource的代码,其原理也很简单,就是读取配置文件,根据配置文件中配置的数据源数量,动态创建dataSource并注册到Spring中. ...

  3. 基于.NET的弹性及瞬间错误处理库Polly

    本文基本是官方说明的翻译和总结(https://github.com/App-vNext/Polly) 什么是Polly? Polly是一款基于.NET的弹性及瞬间错误处理库, 它允许开发人员以顺畅及 ...

  4. attr设置checked,disabled等属性失效的问题,jquery的attr和prop的区别

    最近做项目遇到一个问题,radio设置了默认checked值,attr("checked",true)切换checked值失效 最后发现是jquery1.6版本之后,attr和pr ...

  5. 将java项目打包为jar

    打开Eclipse,点击file,选择export 选择java,选择其中的JAR file并点击next 选择需要的到处的项目,并在下方输入将项目保存为的目录,文件名字. 如果,已经将项目打包为一个 ...

  6. 腾讯WeTest《2017中国移动游戏质量白皮书》开放预约,再为国内手游把把脉

    产品为王,质量先行.如果说2016年是爆款手游相继崛起的一年,那么2017年则更像是打磨精品.建立生态的高手切磋之年.守住一个游戏的质量生命线,方能建立健康生态,方能在如火如荼的行业竞争中角逐到最后. ...

  7. Nginx优点

    1.高并发响应性能非常好,官方Nginx处理静态文件并发5w/s 2.反向代码性能非常强(可用于负载均衡) 3.内存和cpu占比率低(为Apache的1/5-1/10); 4.对后端服务有健康检查功能 ...

  8. Solr集群搭建详细教程(二)

    注:欢迎大家转载,非商业用途请在醒目位置注明本文链接和作者名dijia478,商业用途请联系本人dijia478@163.com. 之前步骤:Solr集群搭建详细教程(一) 三.solr集群搭建 注意 ...

  9. SAP RFC介绍:关于sRFC,aRFC,tRFC,qRFC和bgRFC

    大概八月份的时候做过一个有关两个SAP系统的财务集成的项目,使用到了RFC(Remote Function Call)技术.因为之前有着医疗-CRM相关接口开发的经验,以为自己对RFC很熟悉了,做起来 ...

  10. Java零碎总结

    获取当前类运行的根目录(即classpath,如bin.classes.AppName等)的方式有: 1.Thread.currentThread().getContextClassLoader(). ...