先来实现上传。

写上传不管语言,都要先注意前端的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. Jenkins+tomcat+jdk setup

    Jenkins download: http://jenkins-ci.org/ jdk version:jdk-7u45-linux-x64.tar.gz tomcat version:apache ...

  2. JAVA入门[19]-Hibernate简单示例

    一.Hibernate简介 在很多场景下,我们不需要使用JdbcTemplate直接操作SQL语句,这时候可以用ORM工具来节省数大量的的代码和开发时间.ORM工具能够把注意力从容易出错的SQL代码转 ...

  3. gulp的基本用法

    这几天简单的研究了一下gulp的用法,gulp对于初学者来说还是很友好的. 官方给出gulp的优点如下: 1.通过代码优于配置的策略,Gulp 让简单的任务简单,复杂的任务可管理. 2.Gulp 严格 ...

  4. Python笔记·第二章—— Python的编码问题(一)

    一.什么是编码 可以说,计算机是一个即聪明又笨蛋的家伙.说它聪明,是因为他可以做很多事情,它的强大无需多说,大家应该都有所了解以及感受.但是为什么说它又是个笨蛋呢,因为我们在电脑上写出的每一个字,保存 ...

  5. Spring依赖注入原理

    接触过spring 的同学应该都知道依赖注入,依赖注入又称控制反转,其内涵就是,将创建某个bean的控制权力,由原来需要引用这个bean的bean转移(反转)到外部的spring IOC容器,由IOC ...

  6. nginx配置(windows配置)

    以下是我的项目用到的一份配置文件#user  nobody;worker_processes  4; #进程数,一般cpu是几核就写多少#error_log  logs/error.log;#erro ...

  7. android 分享一个处理BaseAdapter,getView()多次加载的方法

    一:BaseAdapter介绍 BaseAdapter是listview,gridview等列表,使用的数据适配器,它的主要用途是将一组数据传到ListView.Spinner.Gallery及Gri ...

  8. idea 配置热部署

    1. 2.

  9. Intellij IDEA编译代码出现红色标志

    如图 原因:项目没有模块化加载 解决方法: 快捷键 Ctrl+Alt+Shift+S 进入 Project Structure 界面,选择 Modules --> Sources -->选 ...

  10. Hibernate学习---单表查询

    我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然前面讲到Hibernate非常强大,所以 ...