使用Struts2实现文件的上传和下载
(一)单个文件的上传步骤:
1.拷贝jar包:commons-fileupload.jar, commons-io.jar
下载链接(文件上传.rar):http://www.cnblogs.com/withyou/admin/Files.aspx
2.JSP页面中增加form:(form属性是固定的)
<form action= "uploadAction" enctype="multipart/form-data" method="post" >
姓名:<input type="text" name="uname" /><br/>
附件:<input type="file" name="fileUpload" /><br/>
<input type="submit" value="提交" />
</form>
3.action层代码:
public class UploadAction {
private String uname;
private File fileUpload;
private String fileUploadFileName;//名字规范 File属性的 名字+FileName,(该属性为上传过来的文件名)
public String execute() throws IOException{
String path = ServletActionContext.getServletContext().getRealPath("/fileUpload/");//该path为tomcat下的webapp/工程/下
for(int i = 0;i<fileUpload.length;i++){
String[] fielNameArray = fileUploadFileName[i].split("\\.");
//将上传的文件存到指定路径下,UUID是为了避免文件名重复
FileUtils.copyFile(fileUpload[i],new File(path+"\\"+UUID.randomUUID()+"."+fielNameArray[fielNameArray.length-1]));
}
return null;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public File[] getFileUpload() {
return fileUpload;
}
public void setFileUpload(File[] fileUpload) {
this.fileUpload = fileUpload;
}
public String[] getFileUploadFileName() {
return fileUploadFileName;
}
public void setFileUploadFileName(String[] fileUploadFileName) {
this.fileUploadFileName = fileUploadFileName;
}
}
4.补充几个java获取路径的信息
a.获取web服务器下的文件路径 (tomcat等服务器安装目录/webapp/工程/)
request.getRealPath("/") ;application.getRealPath("")【jsp中 】 ;ServletContext().getRealPath("")
如:request.getRealPath("web.xml") 的结果为:
C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\strutsTest\web.xml
b.获取本地路径
this.getClass().getClassLoader().getResource("").getPath(); ==/D:/workspace/strutsTest/WebRoot/WEB-INF/classes/
this.getClass().getResource("").getPath().toString(); ==/D:/workspace/strutsTest/WebRoot/WEB-INF/classes/bl/
c.获取相对路径 :
request.getContextPath();
(二)多个文件上传步骤:
1.拷贝jar包;
2.jsp代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'upload.jsp' starting page</title>
<script src="js/jquery-1.4.4.js"></script>
<script type="text/javascript">
/*添加附件*/
function addFileButton(){
var fileStr = "<div>附件:<input type='file' name='fileUpload' /> <input type='button' value='删除' onclick='delFileButton(this);' /><br/></div>";
$("#div1").append(fileStr);
}
/*删除附件*/
function delFileButton(obj){
obj.parentNode.parentNode.removeChild(obj.parentNode);
}
</script>
</head>
<body>
<form action= "uploadAction" enctype="multipart/form-data" method="post" >
姓名:<input type="text" name="uname" /><br/>
<fieldset>
<legend><input type="button" value="添加附件" onclick="addFileButton();" /></legend>
<div id="div1">
<div>附件:<input type="file" name="fileUpload" /><input type="button" value="删除" onclick="delFileButton(this);" /><br/></div>
</div>
</fieldset>
<input type="submit" value="提交" />
</form>
</body>
</html>
3.action层代码:
package com.bjsxt.struts2.action; import java.io.File;
import java.io.IOException;
import java.util.UUID; import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext; public class UploadAction {
private String uname;
private File[] fileUpload;
private String[] fileUploadFileName;//名字规范 File属性的 名字+FileName;
public String execute() throws IOException{
System.out.println("--------uname-------"+uname);
String path = ServletActionContext.getServletContext().getRealPath("/fileUpload/");
System.out.println(path);
for(int i = 0;i<fileUpload.length;i++){
String[] fielNameArray = fileUploadFileName[i].split("\\.");
FileUtils.copyFile(fileUpload[i],new File(path+"\\"+UUID.randomUUID()+"."+fielNameArray[fielNameArray.length-1]));
}
return null;
}
public String getUname() {
return uname;
} public void setUname(String uname) {
this.uname = uname;
} public File[] getFileUpload() {
return fileUpload;
} public void setFileUpload(File[] fileUpload) {
this.fileUpload = fileUpload;
} public String[] getFileUploadFileName() {
return fileUploadFileName;
} public void setFileUploadFileName(String[] fileUploadFileName) {
this.fileUploadFileName = fileUploadFileName;
}
}
(三)文件下载:
1.action层代码:
package com.bjsxt.hib.action; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException; public class DownloadAction {
private InputStream inputStream;
private String fileName; public String execute(){
try {
this.inputStream = new FileInputStream("D:\\123.txt");//这里有很多处理手段满足不同需求(从数据库读取等)
this.fileName = "哈喽.txt";
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return "success";
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
/*乱码处理*/
public String getFileName() {
String temp=null;
try {
temp = new String(this.fileName.getBytes(),"ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return temp;
}
public void setFileName(String fileName) {
this.fileName = fileName;
} }
2.struts.xml配置:
<action name="downloadAction" class="com.bjsxt.hib.action.DownloadAction">
<result name="success" type="stream">
<!--前两行是不可变的 -->
<param name="contentType">application/x-download</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="bufferSize">4096</param>
</result>
</action>
3.浏览器直接输入:http://localhost:8080/downloadAction即可访问,下载.
使用Struts2实现文件的上传和下载的更多相关文章
- 基于struts2框架文件的上传与下载
在开发一些社交网站时,需要有允许用户上传自己本地文件的功能,则需要文件的上传下载代码. 首先考虑的是文件的储存位置,这里不考虑存在数据库,因为通过数据库查询获取十分消耗资源与时间,故需将数据存储在服务 ...
- Struts2控制文件的上传与下载
Struts2控制文件上传与下载的几个注意事项: (1)必须将表单的method设置为post,将enctype设置为multipart/from-data.只有这样,浏览器才会把用户选择文件的二进制 ...
- struts2实现文件的上传和下载实例[转]
实现原理 Struts 2是通过Commons FileUpload文件上传. Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器 ...
- Struts2中文件的上传与下载
文件上传 1.jsp页面 <s:form action="fileAction" namespace="/file" method="POST& ...
- JSP文件的上传和下载
文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件.而且支持断点续传. 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场 ...
- Struts2实现文件的上传与动态下载功能。
本篇主要使用Struts2实现文件的上传与动态下载功能.出于安全考虑,所以,在硬盘上存储上传的文件的时候,统一都重新命名为随机字符串.用数据库存储真实文件名与随机文件名称之间的关联. 下面的是实体类 ...
- java实现文件的上传和下载
1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...
- java实现ftp文件的上传与下载
最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...
- 在SpringMVC框架下实现文件的 上传和 下载
在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8" ...
随机推荐
- WPF中嵌入WinForm中的webbrowser控件
原文:WPF中嵌入WinForm中的webbrowser控件 使用VS2008创建WPF应用程序,需使用webbrowser.从工具箱中添加WPF组件中的webbrowser发现其中有很多属性事件不能 ...
- js对象字面量
在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ),JavaScript也不例外.以 ...
- HTML5它contenteditable属性
HTML5它contenteditable属性 1.功能说明 (1)功能:同意用户编辑元素中的内容 (2)说明:是一个布尔值.false是不能编辑,true为可编辑 2.分析实例 (1)content ...
- 使用Scala操作Mongodb
介绍 Scala是一种功能性面向对象语言.它融汇了很多前所未有的特性.而同一时候又执行于JVM之上.随着开发人员对Scala的兴趣日增,以及越来越多的工具支持,无疑Scala语言将成为你手上一件不可缺 ...
- Linux Kernel的Makefile与Kconfig文件的语法
https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt Introduction ------------ The c ...
- VS2015安装
VS2015安装 Secondary Installer Setup Failed求解决方案 看到微软最近的一系列变化,着实让我等兴奋不已.VS2015下载地址就不说了.先来记录一下微软的几个变化吧. ...
- 实例学习SSIS(五)--理论介绍SSIS
原文:实例学习SSIS(五)--理论介绍SSIS 导读: 实例学习SSIS(一)--制作一个简单的ETL包 实例学习SSIS(二)--使用迭代 实例学习SSIS(三)--使用包配置 实例学习SSIS( ...
- 大约ActionContext.getContext()使用体验
这是我在另一个人的博客看了,原来博客的时间长一点.我把它简化了一下,运营商,以方便它看起来. 为了避免与Servlet API耦合在一起,方便Action类做单元測试,Struts 2对HttpSer ...
- SignalR 2.0 入门与提高
SignalR 2.0 入门与提高 SignalR 2.0 最近整理了SignalR2.0 部分知识点,原文翻译,由于自己是土鳖,翻译得不好的地方,欢迎指正!仅供各位初学者学习! 第一节. 入门ASP ...
- 一个ASP.NET Web API 2.0应用
在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.N ...