struts上传下载代码

合集下载

使用struts2及xheditor实现文件、图片上传(支持拖拽上传)

使用struts2及xheditor实现文件、图片上传(支持拖拽上传)

xheditor +struts2 文件上传(一般情况和支持HTML5拖拽上传)1、准备工作Struts2.2.3导入相关jar包Xheditor1.1.4引入jquery和xheditor的js文件2、效果图a) 使用上传图片按钮进行上次b) 将图片进行拖入上传(支持html5的浏览器)3、相关代码a)单纯的使用普通方式上传:如下图:Struts2中Action中的方法:和传统的上传没什么区别,记得写getter和setterXheditor官方要求:返回内容必需是标准的json字符串,结构可以是如下:{"err":"","msg":"200906030521128703.gif"} 或者{"err":"","msg":{"url":"200906030521128703.jpg","localfile":"test.jpg","id":"1"}} 注:若选择结构2,则url变量是必有注意:1.上传成功时返回的json字符串是:{"err":"","msg":"200906030521128703.gif"}2.err是””,不能省略,3.方式1,msg返回值是上传成功文件的路径;4.方式2,则msg中的url是上传成功文件的路径5.url第一个字符是!表示立即上传,不需要点确定就插入到textarea中Jsp中:【特别应该注意的是:html5Upload:false;如果不设置成false,在支持html5的浏览器(eg:chrome)中,会默认使用html5上传的方式,导致未设置multipart/form-data上传失败,而在不支持html5,例如IE中正常。

struts2下载(使用配置文件)

struts2下载(使用配置文件)

struts2下载(使用配置文件)1.第一步web.xml2.<?xml version="1.0" encoding="UTF-8"?>3.<web-app version="2.4"4.xmlns="/xml/ns/j2ee"5.xmlns:xsi="/2001/XMLSchema-instance"6.xsi:schemaLocation="/xml/ns/j2ee7./xml/ns/j2ee/web-app_2_4.xsd">8.<welcome-file-list>9.<welcome-file>index.jsp</welcome-file>10.</welcome-file-list>11.12.<filter>13.<filter-name>struts2</filter-name>14.<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>15.</filter>16.<filter-mapping>17.<filter-name>struts2</filter-name>18.<url-pattern>/*</url-pattern>19.</filter-mapping>20.21.</web-app>第二步:struts.xml1.<!DOCTYPE struts PUBLIC2."-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"3."/dtds/struts-2.0.dtd">4.<struts>5.<package name="default" extends="struts-default">6.<action name="download" class="action.DownloadAction">7.<result type="stream">8.<param name="contentType">application/octet-stream</param>9.<param name="inputName">inputStream</param>10.<param name="contentDisposition">attachment;filename="${fileName}"</param>11.<param name="bufferSize">4096</param>12.</result>13.</action>14.</package>15.</struts>当result为stream类型时,struts2会自动根据你配置好的参数下载文件。

关于文件上传与下载的实现方法总结

关于文件上传与下载的实现方法总结

现就JA V A中文件上传与下载的实现方法总结如下:一、上传方法1.http方式:2)架包mons.fileupload.servlet.ServletFileUpload3)架包com.jspsmart.upload.SmartUpload4)架包jspupload5)传统fileinputstream,fileoutputstream方式6)struts框架支持2.FTP方式:1)sun的架包2)架包.ftp.FTPClient 比较好用3)架包.ftp.FTPClient二、下载方法1.http方式1)servlet+传统fileinputstream,fileoutputstream2)架包.ftp.FTPClient2.FTP方式:1)servlet+架包.ftp.FTPClient 比较好用下面就架包.ftp.FTPClient实现文件上传与下载。

代码如下:上传:JSP:<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html><head><title>文件上传</title></head><body><form action="/struts2HibernateSpring/servlet/uploadServletA" method="post">文件位置:<input type="file" name="mfile"><br><input type="submit" value="提交"></form></body></html>SERVLET:package com.test;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class UploadServletA extends HttpServlet {private static final long serialVersionUID = 1L;public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {try{request.setCharacterEncoding("utf-8");response.setCharacterEncoding("UTF-8");response.setContentType("text/html; charset=UTF-8");String myFile = request.getParameter("mfile"); //获取页面提交的文件int indexOf = stIndexOf("\\"); //获取最后一个“/”所在的索引位String fileName = myFile.substring(indexOf); //获取文件上传的文件名//创建输出流把指定的文件写入WEB工程的upload目录下(需要在WebRoot目录下创建upload目录)。

struts2入门手册

struts2入门手册

struts2入门手册首先这个教程是基于你已经安装了myeclipse的基础上的,如果你还没有安装myeclipse 工具软件的话,你需要马上去安装一个。

如果你已经有了工具软件了的话,现在就按照以下步骤来入门struts2吧。

一、下载struts2进入struts的官网/,点击download,选择Full Distrybution:下的struts2-xxx-all.zip,下载struts2的最新版本,将压缩包解压,放置到D盘目录下。

二、解压struts2进入你解压后的struts2文件夹中,到D:\struts2-xxx\apps中,解压其中的struts2-blank.war 压缩文件到D:\struts2-xxx\example,这是struts2提供的基础例子,里面的WEB-INF\lib目录下的包正是struts2正常工作所需要的基本包。

三、导入struts2基本包打开你的myeclipse,创建一个web project工程,命名为test(你也可以自己随意起一个),不要急着点击Finish,先选择Next>,继续选择Next>,在弹出的对话框中把第二个单选框打勾,如图,再点击Finish。

创建好之后在你创建的工程上目录下的WebRoot/WEB-INF/lib目录上单击右键,选择import...,选择General下的File System,点击Next>,选择Browse...,浏览选择到D:\struts\example\WEB-INF\lib目录,点击确定。

选择Sellct All,点击Finish,就完成了struts需要的最基础的核心包的导入。

四、用struts实现一个简单的登陆验证1.修改工程目录下的WebRoot\WEB-INF目录下的web.xml文件,将里面的内容替换为如下代码:<?xml version="1.0"encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>test</display-name><!-- 设置初始页面的URL --><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list><!-- 设置struts过滤器 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>2.在工程的src目录下创建struts.xml,代码如下:<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""/dtds/struts-2.3.dtd"><struts><!-- 是否开启动态方法调用 --><constant name="struts.enable.DynamicMethodInvocation"value="false"/> <!-- 指定被struts2处理的请求的后缀类型,多个用逗号隔开 --><constant name="struts.action.extension"value="action"/><!-- 设置浏览器是否静态缓存内容,开发阶段最好关闭 --><constant name="struts.devMode"value="true"/><!-- 设置当struts.xml改动后,是否重新加载,默认为false,开发环境下最好打开 --> <constant name="struts.configuraction.xml.reload"value="true"/> <package name="myPackage"namespace="/"extends="struts-default"> <action name="login"class="action.LoginAction"><result name="success">/welcome.jsp</result> <result name="input">/login.jsp</result></action></package></struts>3.在工程的src目录下创建package(包),命名为action,在action中新建class,命名为LoginAction,代码如下:package action;import javax.servlet.http.HttpSession;import com.opensymphony.xwork2.ActionSupport;import org.apache.struts2.ServletActionContext;@SuppressWarnings("serial")public class LoginAction extends ActionSupport {private String name;private String password;public String getName() {return name;}public void setName(String name) { = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String forward() throws Exception {return SUCCESS;}//重载ActionSupport中的execute()方法public String execute() throws Exception {//验证输入的Name是否为"name",是则返回"success"否则返回"input"if("name".equals(name)) {HttpSession session = ServletActionContext.getRequest().getSession();session.setAttribute("name", name);return SUCCESS;} else {return INPUT;}}}4.在工程的WebRoot目录下创建login.jsp,代码如下:<%@page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib prefix="s"uri="/struts-tags"%><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>Login</title></head><body><!-- 创建一个登陆表单 --><s:url action="login"id="loginUrl"></s:url><s:form action="%{loginUrl}"method="post"><s:textfield label="Name"name="name"/><s:password label="Password"name="password"/><s:submit></s:submit></s:form></body></html>5.在工程的WebRoot目录下创建welcome.jsp,代码如下:<%@page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@taglib prefix="s"uri="/struts-tags"%><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>Welcome</title></head><body><h1>登陆成功</h1></body></html>现在就来验证一下我们的登陆页面吧,选择工具栏中的按钮,在弹出的对话框中单击project后的矩形选框,从下拉列表中选择你创建的工程,然后单击Add,从弹出的对话框中单击sever后的矩形选框,从下拉列表中选择tomcat7,单击Finish。

struts2教程(完全版)

struts2教程(完全版)

Yaio 4一、准备工作及实例 41.解压struts-2.1.6-all.zip 42.六个基本包 43.初识struts2配置文件 4(1).web.xml文件 4(2).struts.xml文件 4(3).struts.properties(参default.properties) 4 (4)struts-default.xml 5(5)其它配置文件 54.让MyEclipse提示xml信息 55.如何使用alt+/提示 56.实例 57.开启struts2自带的开发模式常量 78.vo传参模式 89.ModerDriven传参模式(不建议采用) 810.为什么要使用struts2代替struts1.x 9二、struts.xml配置及例程 91.配置文件的优先级 92.配置形式 93.package配置相关 104.分工合作include:指定多个配置文件 125.tomcat认证访问 126.初识拦截器 137.Action中的method属性 158.使用ForwardAction实现页面屏蔽。

178.使用default-Action配置统一访问 17小结Action 189.使用通配符 1810.使用0配置:ZERO Annotation 1911.Result配置详解 1912.异常处理 24三、在Action获取Scope对象 25方式一、与Servlet解耦合的非IOC方式 25方式二、与Servlet解耦合的IOC方式 27 方式三、与Servlet耦合的非IOC方式 27 方式四、与Servlet耦合的IOC方式 28四、OGNL与ValueStack(VS) 291.值栈入门 292.OGNL入门 313.普通方法访问 314.静态方法访问 315.默认类Math的访问 326.调用普通类的构造方法 327.集合对象初步 328.集合对象进阶 339.N语法top语法 3410.获取Stack Context中的信息 3511.总结$ # %的区别 3512.总结OGNL[重点] 35五、拦截器 361.概述strust2中的拦截器 362.自定义拦截器 37方式一,实现Interceptor接口。

asp.net对文件的上传和下载源码

asp.net对文件的上传和下载源码

对文件的上传和下载源码上传Aspx 代码<%@ Page Language="C#"AutoEventWireup="true" CodeFile="MultiFileUpload.aspx.cs"Inherits="MultiFileUpload" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head runat="server"><title>孟宪会多文件上传测试</title><script type="text/javascript">function addFile() {var div = document.createElement("div");var f = document.createElement("input");f.setAttribute("type", "file")f.setAttribute("name", "File")f.setAttribute("size", "50")div.appendChild(f)var d = document.createElement("input");d.setAttribute("type", "button")d.setAttribute("onclick", "deteFile(this)");d.setAttribute("value", "移除")div.appendChild(d)document.getElementById("_container").appendChild(div);}function deteFile(o) {while (o.tagName != "DIV") o = o.parentNode;o.parentNode.removeChild(o);}</script></head><body><form id="form1"runat="server"method="post" enctype="multipart/form-data"><h3>多文件上传</h3>用户名:<asp:TextBox ID="T extBox1" runat="server"></asp:TextBox><div id="_container"><input type="file" size="50" name="File"/></div><div><input type="button"value="添加文件(Add)" onclick="addFile()"/></div><div style="padding:10px 0"><asp:Button runat="server"Text="开始上传" ID="UploadButton"onclick="UploadButton_Click"></asp:Button></div><div><asp:Label ID="strStatus" runat="server" Font-Names="宋体" Font-Bold="True" Font-Size="9pt"Width="500px"BorderStyle="None"BorderColor="White"></asp:Label></div></form></body></html>C#代码using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class MultiFileUpload : System.Web.UI.Page{protected void UploadButton_Click(object sender, EventArgs e){///'遍历File表单元素HttpFileCollection files = HttpContext.Current.Request.Files;/// '状态信息System.Text.StringBuilder strMsg = new System.Text.StringBuilder("您输入的用户名是:" + TextBox1.Text + "<br/>");strMsg.Append("上传的文件分别是:<hr color='red'/>");try{for (int iFile = 0; iFile < files.Count; iFile++){///'检查文件扩展名字HttpPostedFile postedFile = files[iFile];string fileName, fileExtension;fileName = System.IO.Path.GetFileName(postedFile.FileName);if (fileName != ""){fileExtension = System.IO.Path.GetExtension(fileName);strMsg.Append("上传的文件类型:"+ postedFile.ContentType.ToString() + "<br>");strMsg.Append("客户端文件地址:" + postedFile.FileName + "<br>");strMsg.Append("上传文件的文件名:" + fileName + "<br>");strMsg.Append("上传文件的扩展名:"+ fileExtension + "<br><hr>");///'可根据扩展名字的不同保存到不同的文件夹///注意:可能要修改你的文件夹的匿名写入权限。

基于Struts2框架的文件上传下载功能的设计与实现

基于Struts2框架的文件上传下载功能的设计与实现

1引 言
<i n t e r c e p t o r -r e f n a me =” d e f a lt u S t a c k” />
随着信 息技 术的 发展 , 基 于B / S ( 浏 览器/ 服务 器墚 构 的we b 系统 的应用 越 来 越广 泛 , 而文件 的上 传和 下载 的功 能是这 些系 统 中常用 的功 能模块 之一 。 例 如, 在办 公系统 中的 收发邮件 的功 能模块 , 有进行 收发 附件 的操作 ; 在管理 信息 系统中, 有存 储和 显 示注 册 人员 的 照片 等功 能 。 本 文将 基于S t ut r s 2 的 开发 框 架, 通过 使用 S t ut r s 提供的C o mmo n s F l f e Up l o a d , 将H rr P 的数 据保 存 到』 } 缶 时 文件 夹 , 然 后S t r u t s  ̄ 用f i l e Up l o a d  ̄ = 截 器 将文件 绑 定 ̄ ] 1 A c t i o n 的实 例 中 , 从而 实现 以本地 文件 方 式的 操作 浏 览器上 传 的文件 和 下载本 地 的文件 。
2文件 上传 功 能的 设计 实现 上 传文件 首 先是将 文件上 传到 服务器 , 有两 种方式 实现 。 第 一种 是将上 载 的 内容 以文件 的形 式存 储到 服务器 的硬盘 ; 第 二种是将 文件直 接上传 到数据 库 服务 器 的数据 库 中。 本文 采取第 一 种文件 上 传的 实现方 式 。 在 上传 功能 的设计 过程 中 , 需要对 前后 台 页面进行 相应 的设置 和 编码 , 通
</a c t i o n >
这里 需要 注意 , 拦截器 的设 置应 当指 明为s U u s ̄带 的默认 拦截器 , t 若采用 自定义 的拦 截 器 , 会 影响上 传 功能 。

Struts2详细实例教程

Struts2详细实例教程

Struts2(上)一、经典的MVC模式二、Struts1.x对MVC的实现三、Struts1.x的主要组件和作用组件作用ActionServlet 中央控制器Action 分控制器,调用JavaBean实现业务逻辑,Action可以分为Action、DispatchAction等不同类型ActionForm 封装参数,实现服务器验证,文件上传等Forward 转发到目的地,可以是JSP,也可以是另一个ActionStruts-config.xml 配置文件,配置有ActionForm,Action,Forward等,通过XML解析,然后使用反射技术使用该文件Struts标签库和JSTL类似,和Struts-config.xml、ActionForm、Action等对象可以紧密集成四、Struts1.x 开发实例-登录程序见案例。

五、Struts2(WebWork)的MVCStruts2的MVC架构六、Struts2的主要组件组件作用FilterDispatcher 起中央控制器作用的过滤器Action 处于Model层的Action,调用JavaBean实现业务逻辑struts.xml 核心配置文件,配置有Action、Result等result 和forward类似,转发的目的地,支持多种视图技术。

七、Struts2的实例-登录在MyEclipse环境中建立一个新的web工程,名称“Struts2Login”,存放路径“f:\Struts2Login”。

在Struts2.0.11版本中找到war包struts2-blank-2.0.11.war,解开该war包,在WEB-INF/lib 目录下复制出所有的jar包,这些jar包就是一个Struts2程序所需要的基础jar包,把它们复制到新建的web工程的WEB-INF/lib目录中。

在src目录下建立一个类,包名mypack,类名UserAction,其代码如下:package mypack;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private String username;private String userpass;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getUserpass() {return userpass;}public void setUserpass(String userpass) {erpass = userpass;}@Overridepublic String execute() throws Exception {if ("Mike".equals(username) && "123".equals(userpass)|| "张三".equals(username) && "abc".equals(userpass))return "success";elsereturn "error";}}在src目录下建立Struts2的配置文件struts.xml,内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><!-- 定义包管理配置的action 继承struts-default.xml中的配置 --><package name="actions" extends="struts-default"><!-- 定义Action(login.action) --><action name="login" class="erAction"><!-- 定义转发路径对应的字符串名 --><result name="success">/Success.jsp</result><result name="error">/Error.jsp</result></action></package></struts>修改web.xml,在其中加入一个过滤器,过滤/*路径。

jsp实现文件上传和下载

jsp实现文件上传和下载

1 JSP文件上传简单实例1、index.html代码:<html><head><title>上传图片</title></head><body><form action="do_upload.jsp" method="post" enctype="multipart/form-data"><input type="file" name="Photo"><input type="submit" value="上传"></form></body></html>2、使用到的函数和类说明File类文件和目录路径名的抽象表示形式,File(parent,child)方法根据parent 抽象路径名和child 路径名字符串创建一个新File实例FileOutputStream文件输出流,InputStream输入流,将输入数据看成一根管道,可以形象的将输入流比喻成管道的入口,而输出流比喻成管道的出口。

read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个字节数组中。

read() 从此输入流中读取一个数据字节。

write(int b) 将指定字节写入此文件输出流,write(byte[] b, int off, int len) 将指定字节数组中从偏移量off 开始的len 个字节写入此文件输出流。

write(byte[] b) 将 b.length 个字节从指定字节数组写入此文件输出流中Random.readLine()逐行读入,Random.seek(int pos)设置到此文件开头测量到的文件指针偏移量,该位置发生下一个读取和写入操作,Random.getFilePointer()返回此文件当前偏移量,Random.readByte()此方法从该文件的当前文件指针开始读取第一个字节。

struts2多文件上传下载

struts2多文件上传下载

struts2多文件上传下载文件上传:1,upload.jsp如下:<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <%@ taglib prefix="s" uri="/struts-tags"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";%><title>My JSP 'upload.jsp' starting page</title><!--下面script实现多文件上传--><script type ="text/javascript">function onMore(){var td =document.getElementById("more");varbr = document.createElement("br");var input = document.createElement("input");var button = document.createElement("input");input.type = "file";="file";button.type="button";button.value="删除";//当点击删除时,删除一行。

Jsp页面实现文件上传下载

Jsp页面实现文件上传下载

Jsp页面实现文件上传下载第1 页jsp页面实现文件上传代码开发的过程见用TOMCAT作简单的jsp web开发名称:jsp页面上传类作者:SinNeRMail:vogoals[at]特点:1可以多文件上传;2返回上传后的文件名;3form表单中的其他参数也可以得到。

先贴上传类,JspFileUploadpackage com.vogoal.util;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.Hashtable;import javax.servlet.ServletInputStream;import javax.servlet.http.HttpServletRequest;/** vogoalAPI 1.0*************************** by *mail:********************//*** JSP上传文件类** @author SinNeR* @version 1.0*/public class JspFileUpload {/** request对象*/private HttpServletRequest request = null;/** 上传文件的路径*/private String uploadPath = null;/** 每次读取得字节的大小*/private static int BUFSIZE = 1024 * 8;/** 存储参数的Hashtable */private Hashtable paramHt = new Hasptable();/** 存储上传的文件的文件名的ArrayList */private ArrayList updFileArr = new ArrayList();/*** 设定request对象。

Struts2实现文件上传

Struts2实现文件上传

Struts2实现文件上传文件上传,说白了就是个文件复制的过程,文件复制需要什么呢,只需要有源文件和目标地址即可,·用main方法实现的文件复制代码如下:package cn.oracle.upload;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;public class FileUploadDemo {public static void main(String[] args) throws Exception{File input=new File(args[0]); 参数args[0]是你运行Java程序的时候输入的参数,下面有详细解释:if(!input.exists()){System.out.println("源文件不存在!");System.exit(0);}File output=new File(args[1]);if(!output.getParentFile().exists()){output.mkdirs();}OutputStream outputFile=new FileOutputStream(output);InputStream inputFile=new FileInputStream(input);byte data[]=new byte[1024];int temp=0;while((temp=inputFile.read(data))!=-1){outputFile.write(data, 0, temp);}outputFile.close();inputFile.close();}}例如上图中的Java 运行的程序类名称后面就是参数第一个是d:\1.txt 是一个参数args[0],d:\2.txt是第二个参数args[1]C:\Users\congz_000>java FileUploadDemo d:\1.txt d:\2.txt上面的代码就实现了文件的复制,其实在struts2之中的实现原理是一样的,也就是两个File对象,两个字节流对象,然后调用相应的方法执行的复制而已;在struts2之中实现的复制需要一个表单,将此表单的内容提交到一个action之中,然后struts负责参数的接受处理,赋给相应的变量,编写一个文件复制的方法即可完成文件上传;·给项目添加struts2开发支持,我们用自动配置的方式,用myeclipse帮我们完成,不需要做过多的配置,一路next即可;·新建一个upload.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><title>文件上传</title></head><body><form action="FileUpload!upload.action"method="post"enctype="multipart/form-data"><input type="file"name="photo"id="photo"> 这个name属性一定要和action之中的File 类对象的名称一致;<input type="submit"value="上传"></form></body></html>·一个用来表示上传成功的页面<%@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><title>文件上传</title></head><body><h1>上传成功</h1></body></html>·一个用来表示上传失败的页面<%@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><title>文件上传</title></head><body><h2>上传失败!</h2></body></html>·编写相应的上传需要的action FileUploadActionpackage cn.oracle.action;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.UUID;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class FileUploadAction extends ActionSupport { private File photo;private String photoFileName;public void setPhotoFileName(String photoFileName) { this.photoFileName = photoFileName;}public void setPhoto(File photo) {this.photo = photo;}public String upload(){System.out.println("************");String filePath =ServletActionContext.getServletContext().getRealPath("/upload")+ File.separator+ UUID.randomUUID()+ "."+ this.photoFileName.substring(this.photoFileName.lastIndexOf(".") + 1);if(this.saveFile(this.photo, filePath)){return"success";}return"failure";}public boolean saveFile(File input, String outputFilePath) { File output = new File(outputFilePath);if (!output.getParentFile().exists()) {output.mkdirs();}InputStream inputFile = null;try {inputFile = new FileInputStream(input);} catch (FileNotFoundException e) {e.printStackTrace();}OutputStream outputFile = null;try {outputFile = new FileOutputStream(output);} catch (FileNotFoundException e) {e.printStackTrace();}byte[] data = new byte[1024];int temp = 0;try {while ((temp = inputFile.read(data)) != -1) {outputFile.write(data, 0, temp);}if (inputFile != null) {inputFile.close();}if (outputFile != null) {outputFile.close();}return true;} catch (Exception e) {e.printStackTrace();}return false;}}·配置Struts.xml文件<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""/dtds/struts-2.1.dtd"><struts><package name="main"namespace="/"extends="struts-default"><action name="FileUpload"class="cn.oracle.action.FileUploadAction"> <result name="success">/success.jsp</result><result name="failure">/failure.jsp</result></action></package></struts>·我们还需要配置一个Struts.properties的资源文件,在src之中,设置上传的限制和编码;struts.i18n.encoding=UTF-8struts.multipart.saveDir=/tempstruts.multipart.maxSize=2097152000·我们把项目部署到tomcat或者weblogic之中,按照你的连接访问,整个上传到此就完成了,这是个最简单的上传,没有做任何的修饰,有些上传做的很华丽的,那些都是div+css的功劳,如果你想要那种特效的话,需要研究下css 这个很不错的;。

struts09上传和下载

struts09上传和下载

文件上传UploadAction的实现
UploadForm uploadForm = (UploadForm) form FormFile formFile = uploadForm.getFileName(); //获取文件的基本信息 String fileName = formFile.getFileName(); //String contentType = formFile.getContentType(); //int size = formFile.getFileSize(); byte[] fileData = formFile.getFileData(); //设置文件上传的路径 FileOutputStream out = new FileOutputStream(new File(this.servlet.getServletContext().getRealPath("/")+"//upload//"+fi leName)); out.write(fileData); out.close(); 5 return mapping.findForward("load");
Web开发流行架构-struts
Chapter09 上传和下载
学习目标

文件的上传和下载
2
文件的上传和下载


文件上传的功能,Struts提供了FormFile接口,并在处 理用户请求的时候可以直接将用户提交的文件信息转 化为FormFile对象的实现类。这样在Action中就可以像 操作本地文件一样操作用户所传递的文件信息了。 文件下载的功能是通过DownloadAction实现的,在 DownloadAction的基础上实现了它的getStreamInfo方 法,在这个方法中获得了用于访问下载文件的 StreamInfo对象。

React中的文件上传与下载实现方法

React中的文件上传与下载实现方法

React中的文件上传与下载实现方法在React中,文件上传与下载是开发web应用时经常遇到的需求之一。

本文将介绍几种React中实现文件上传与下载的方法,帮助开发者更好地应对这一需求。

一、文件上传文件上传是将本地文件发送到服务器的过程。

在React中,可以通过使用HTML表单元素或第三方库来实现文件上传功能。

1. 使用HTML表单元素在React中,可以使用HTML的<input type="file">标签来创建文件上传表单。

该标签允许用户选择本地的文件,并将选中的文件存储在React的组件状态或发送到服务器端。

下面是一个简单的文件上传示例:```jsximport React, { useState } from "react";function FileUpload() {const [selectedFile, setSelectedFile] = useState(null);const handleFileChange = (event) => {setSelectedFile(event.target.files[0]);};const handleFileUpload = () => {// 将selectedFile发送到服务器端};return (<div><input type="file" onChange={handleFileChange} /><button onClick={handleFileUpload}>上传</button></div>);}export default FileUpload;```上述代码创建了一个名为FileUpload的组件,其中使用useState钩子函数来保存用户选择的文件。

handleFileChange函数会在用户选择文件时被调用,将选中的文件保存在selectedFile状态中。

Struts2的文件上传和下载问题

Struts2的文件上传和下载问题

Struts2的文件上传和下载问题2012-05-231、Strusts2文件的上传:1、要实现文件上传必须将表单的method属性设置成post,将enctype设置成multipart/form-data,即<s:form action=”…” method=”post” enctype=”multipart/form-data”><input type=”file” name=”…”/>…</s:form>enctyp=”multipart/form-data”表示数据将以二进制流处理。

而在引用struts2的标签的时,应该引入该标签<%@taglib prefix=”s” uri=”/struts-tags”/>2、如果表单中包含一个name属性为***的文件域,则对应的处理Action中应使用以下三个属性来封装***文件域的信息***:File 封装文件域对应的文件内容***FileName:String 封装文件域对应的文件名称***ContentType:String 封装文件域对应的文件类型实现文件上传的主要代码如下:public String execute() throws Exception{ FileOutputStream fos = newFileOutputStream(要将文件上传到那个文件夹的路径);FileInputStream fis = new FileInputStream(getUpload());byte[] buffer =newbyte[1024];int len = 0;while ((len =fis.read(buffer)) > 0){fos.write(buffer, 0,len);}return SUCCESS;}3、应用拦截器实现文件的过滤(Struts2文件上传的拦截器是fileUpload<action name=”uploadPro” class=”…”><interceptor-ref name=”fileUpload”><param name=”allowedTypes”>image/png,imgae/gif,application/ms word</param><!-- 指定允许上传的文件类型--><param name=”maximumSize”>2000</param><!—指定上传的最大文件的大小--></interceptor-ref><interceptor-ref name=”defaultStack”/>…</action>4、上传文件太大的提示信息的key:rge上传文件的文件类型不允许的提示信息的key:struts.messages.error.content.type.not.allowed上传文件失败的提示信息的key:struts.messages.error.uploading设置文件上传的临时路经:struts.multipart.saveDir=”…”2、Struts2文件的下载:Struts2提供stream结果类型来支持文件的下载功能,而配置stream类型的结果需要给出一下四个属性:contentType:被下载文件的类型inputName:为被下载文件创建的一个输入流,在相应的Action中必须为其提供一个返回类型为InputStream的getter方法。

struts2上传文件

struts2上传文件

1. struts2中的文件上传第一步:在WEB=INF/lib下加入commons-fileupload-1.2.1.jar ,commons-io-1.3.2.jar。

第二步:把form表单的enctype属性设置为"multipart/form-data",如Java代码1.<form action="${pageContext.request.contextPath}/control/employee/list_execute.action" enctype="multipart/form-data" method="p ost">2.文件:<input type="file" name="image">3. <input type="submit" value="上传"/>4. </form>5. //${pageContext.request.contextPath}:获取服务器根路径第三步:在action中添加一下属性,Java代码1.public class HelloWorldAction {2. private File image; //与jsp表单中的名称对应3. private String imageFileName; //FileName为固定格式4. private String imageContentType ;//ContentType为固定格式5.6. public String getImageContentType() {7. return imageContentType;8. }9. public void setImageContentType(String imageContentType) {10. this.imageContentType = imageContentType;11. }12. public String getImageFileName() {13. return imageFileName;14. }15. public void setImageFileName(String imageFileName) {16. this.imageFileName = imageFileName;17. }18. public File getImage() {19. return image;20. }21. public void setImage(File image) {22. this.image = image;23. }24. public String execute() throws Exception{25.System.out.println("imageFileName = "+imageFileName);26.System.out.println("imageContentType = "+imageContentType);27. //获取服务器的根路径realpath28. String realpath = ServletActionContext.getServletContext().getRealPath("/images");29.System.out.println(realpath);30. if(image!=null){31. File savefile = new File(new File(realpath), imageFileName);32. if(!savefile.getParentFile().exists()) savefile.getParentFile().mkdirs();33. FileUtils.copyFile(image, savefile);34. ActionContext.getContext().put("message", "上传成功");35. }else{36. ActionContext.getContext().put("message", "上传失败");37. }38. return "success";39. }40.}此外,可以在struts.xml中配置上传文件的大小<constant name="struts.multipart.maxSize" value="10701096"/> //最大上传配置成10M默认的上传大小为2M思维拓展:如果要上传的文件非常大,如上传的是电影,好几百M ,用web上传一般是不可能难上传成功的,这时候要安装一个插件,类似于应用程序socket ,通过网络通讯上传。

尚学堂Struts2_02

尚学堂Struts2_02

<param name=“excludeMethods”>m1,m2</param> <param name="includeMethods">m2</param>
</interceptor-ref> </action> 如果不指定excludeMethods和includeMethods,则所有方法都会被截拦器 截拦. 如果方法在excludeMethods和includeMethods都配置了,则 includeMethods取胜. 如果需要过滤多个方法,方法名之间用逗号隔开.
版权所有:尚学堂科技
尚学堂
手把手教程
Struts+Hibernate+Spring
HttpServletRequest
HttpServletResponse
核心控制器
Intercepter1
Intercepter2
Intercepter3
Action
Result
版权所有:尚学堂科技
尚学堂
手把手教程
版权所有:尚学堂科技
尚学堂Βιβλιοθήκη 手把手教程Struts+Hibernate+Spring
Struts2拦截器——工作原理
拦截器的执行过程是一个递归的过程,越是位于前面的拦截器越被先执行 ,但也是越晚退出。因此,拦截器的调用处理形成了“先进后出”的堆栈 的模式,因此也叫拦截器栈。
版权所有:尚学堂科技
尚学堂
Struts+Hibernate+Spring
Struts2拦截器——作用及意义 早期MVC框架将一些通用操作写死在核心控制器中,致使框 架灵活性不足、可扩展性降低 Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选 择和组合,增强了灵活性,有利于系统的解耦 截拦器是Struts2中最重要的概念之一,是Struts2灵魂。 Struts2中有80%的功能都通过截拦器实现 提高更高层次的解耦,无须侵入框架本身 便可以添加新的功 能.

Struts2架构中的Commons-fileupload组件应用技术

Struts2架构中的Commons-fileupload组件应用技术

Struts2架构中的Commons-fileupload组件应用技术李静梅;王超宇【摘要】基于HTTP传输协议的Web网页中,采用嵌人Commons-fileupload组件的Struts2框架,实现了文件的上传与下载.利用OGNL表达式提取Session持久层中的文件名,并利用此文件名实现下载文件的动态更名.灵活利用struts2.0自身提供的字段类型,提高下载的鲁棒性.并列举实例体现整合技术和动态文件下载的实用性,最后通过与以往2种常用开发框架的对比数据加以验证说明.【期刊名称】《应用科技》【年(卷),期】2011(038)004【总页数】5页(P39-43)【关键词】上传下载;Struts2架构;Commons-fileupload组件;OGNL表达式【作者】李静梅;王超宇【作者单位】哈尔滨工程大学,计算机科学与技术学院,黑龙江,哈尔滨,150001;哈尔滨工程大学,计算机科学与技术学院,黑龙江,哈尔滨,150001【正文语种】中文【中图分类】TP311.1随着Internet的飞速发展,越来越多的人参与到网络活动中.博客、Email等网络应用如雨后春笋般大量涌现,它们充分利用了现有的网络资源,不仅给人们的生活带来了巨大的方便,同时也正在逐渐影响、改变着人们的日常生活方式.网络应用的大量涌现,使得在Web页面上完成基于HTTP超文本传输协议的上传下载功能显得越来越重要.针对这一问题,近几年科研院所和一部分公司提出了一些行之有效的可行性框架和解决方案.Struts2就是众多框架中的佼佼者.Struts2凭借其良好的扩展性,使其在Web应用中展现出了特有的优势.Common-fileupload是由阿帕奇基金会旗下的java开源社区Jakarta社区开发的一款组件,主要作OGNL expression用是提供文件管理功能.Jakarta社区是一个非常成熟的社区,不仅有着稳定的开发团队,而且参与过Tomcat的研发,因此在利用Tomcat为服务器的网络应用程序中,Common-fileupload组件在速度和稳定性上都具有一定的优势.1 Struts2框架Struts2是Struts系列框架的第2代产品.是在Struts1和WebWork的技术基础上进行了合并,形成的全新的框架.全新的Struts 2框架与Struts1存在着巨大的差别.Struts2大量地借鉴WebWork相关技术,采用拦截器来处理用户的请求,这样的设计降低了框架的耦合性,提高了框架的性能.1.1 Struts2的体系结构Struts2与传统的Struts框架在整个体系结构上有了很大的变化.下面对Struts2的体系机构作下简要的介绍.图1为Struts2的体系结构图.图1 Struts2体系结构利用struts2体系结构展开的工作严格遵循下述开发流程:1)浏览器发送一个请求;2)核心控制器FilterDispatcher根据请求决定调用合适的Action;3)WebWork的拦截器自动对请求应用调用功能,如验证等;4)回调Action的execute方法,该execute方法根据请求的参数来执行一定的操作;5)Action的execute方法处理的结果信息将被输出到浏览器中,支持多种形式的视图.1.2 Struts2中的拦截器Struts2框架以拦截器为所有功能的基础.根据WebWork的中文文档,其解释为——拦截器是动态拦截Action调用的对象.拦截器提供了一种机制,不仅使开发者可以定义一个在action执行前、后执行的代码,而且可以在一个action执行前阻止其执行,同时还能提供一种可以提取action中可重用部分的方法.当请求到达Struts2的拦截器时,Struts2会查找配置文件,并根据其配置文件实例化拦截器的对象,然后串成一个列表(list),最后按照FIFO算法调用列表中的拦截器实例化改对象.2 文件上传2.1 常用上传方式基于HTTP传输协议的文件上传主要有手工上传和框架上传2种方式.采用手工文件上传方式时是由表单元素中的enctype属性决定提交表单的方式,并最终由该属性决定最终是以字符串方式还是以二进制编码方式提交请求.当enctype的值为multipart/formdata时,无法直接通过HttpServletRequest的getParameter方法获取请求参数的值,需要通过二进制流来获取请求内容,从而实现文件的上传.这种传统手工编码方式相当繁琐,因此很少被采用.框架上传方式是将手工上传中的一些可以由计算机自动执行的部分,由框架替程序员完成,这样大大简化了编程,使程序更易于维护和管理.框架中的解释器通过分析HTTP请求中的二进制流,解析出二进制流中所包含的全部表单域,并分析出每个表单域的类型.基于框架的文件上传,允许开发者以简单的方式来取得文件域的内容字节、文件名以及文件内容等信息.目前主流上传下载组件主要有3种,分别是COS、JspSmartUpload和Commons-fileupload.这 3 种组件的最大作用是提供自己的请求解释器,并通过自身提供的解释器解析HTTP请求.Struts2由于其自身优秀的模块化设计,使程序员可以在其上添加任何一种组件,实现自己的不同要求.经过标准测试发现,当采用JspSmartUpload组件进行文件上传时,若上传文件大于200 M,JspSmartUpload自身会因为堆栈溢出而崩溃,给程序带来不可预知的隐患,因此本组件并不适合负载较重、稳定性要求比较高的应用.而COS组件单就性能上来说,要略高于Commons-fileupload,但由于 Struts2与 Commons-fileupload 有更高的契合度,整合较为方便,因此选择后者成为实际上传时所采用的组件. 2.2 基于Commons-fileupload组件的上传Commons-fileupload组件最重要的组成部分是自己提出的请求解释器.Struts2采用拦截器列表实现具体功能,因此并未提出自己的请求解释器.通过上面的分析知道,要利用框架实现文件上传,在程序提出一个上传请求后,Struts2框架本身无法解析这样处理请求,因此文中在实现上传这个功能时的主要贡献就是将Commons-fileupload组件中的请求解释器集成到Struts2.0框架中,通过traditional-API实现整合的方案[1-3].在测试了上述整合方案后,发现利用traditionalAPI实现文件上传占用的内存较多,上传速度较慢.通过阅读官方资料发现common-fileupload组件提供了2种请求解释器,分别是TraditionalAPI 和StreamingAPI这2种方式.经具体测试发现,利用StreamingAPI方式实现上传,能有效降低内存占用量,并能提高上传速度.因此这里采用StreamingAPI解释器实现文件上传.当有multipart/formdata请求时,Struts2.0中的拦截器会将请求拦截下来,并通过配置文件中关于解释器的配置信息,调用Commons-fileupload组件中相应的请求解释器对请求作出分析,通过isFormfiled()方法判断表单是一个普通的表单还是一个文件域,最后将解析出来的信息按照数据流方式传给Struts2框架的拦截器,Struts2将对数据进行进一步的操作.图2 文件上传的过程流程实现文件上传的功能逻辑关系如图2所示.在上述理论指导下,在此按照文件上传功能逻辑关系图进行了实际开发,通过实际程序验证了上述理论.Struts2中的Action并不负责处理HttpServletRequest请求,只是通过拦截器获得文件内容、文件名称和文件类型3个属性值.文件提交到后台时,拦截器通过3个属性值来过滤文件,同时将获得的属性值传递给Commons-fileupLoad组件的解释器,如果程序在完成上述关系图上任何一步出错时,拦截器都会返回错误信息.3 文件下载3.1 利用Stream类型字段解决字符库不匹配问题下载文件时,一般将传输数据的数据类型定义为数据库中的数据类型[4-5],这样的优势是数据不需进行转换就可在前台页面与数据库之间来回传递并显示,降低了编程的难度.但其也存在一个致命的缺陷,就是如果数据库与前台页面字符集不匹配,将造成前台页面显示乱码现象.经过分析与研究发现,在Struts2框架中有一种Stream结果类型,它的本意是处理流类型的数据,例如图片和音乐.通过试验发现只要对数据进行适当的更改,Stream这个字段类型除了可以处理图片、声音等数据外,还可以很好地解决字符库不匹配问题.在提取数据库中数据时,利用 StringBufferInput-Stream函数将数据转换成二进制流信息,然后通过Stream字段将二进制流信息传到程序的前台,在前台利用解析程序将二进制流信息还原成原始信息进行展示.由于采用ASCII码形式传送数据,字符库不匹配问题消弭于无形,大大提高了系统的鲁棒性.3.2 利用OGNL表达式提取session内的文件名OGNL(object-graph navigation language)是一种功能强大的表达式语言,通过表达式语法,可以实现存取对象的任意属性、调用对象的方法、遍历整个对象的结构图、字段类型转化等功能.通过OGNL强大的存取功能,实现了文件下载时的动态更名.当用户点击下载时,后台程序中的OGNL表达式会在整个程序的Session持久层中按照ID号提取文件名,并在调用Windows下载API之前将文件名以动态赋值的方式传给下载API,这样在下载对话框中显示出来的就已经是要下载的文件名,而并非像传统的处理方式那样,在下载完毕后更新文件名.用户可以在下载的过程中直观地了解自己所下载文件的名字.动态文件下载的基本流程如图3所示.图3 实现的下载功能过程流程4 Struts2与2类常用开发框架比较Struts2框架是在Struts1和WebWork的技术基础上进行了合并,形成的全新的框架.在大量吸收原有框架的优点后,Struts 2已经是一个非常具有实用价值的MVC框架.与传统Struts框架相比,Struts2在Action类的实现上更为方便,在线程安全和可测试方面做得都要更好.Struts2相比WebWork来说,不再提供内在的IoC容器支持,转而将Spring作为缺省实现,扬长避短,提高了用户体验,同时Struts2还全面引入了Dojo.5 应用实例测试文件上传下载在工作流引擎中的应用相当广泛,选择一种高效的文件上传下载在工作流引擎中有其重要的实用价值.jBPM(java业务流程管理)是一种基于J2EE的轻量级工作流管理系统,其后成为JBoss企业中间件平台的一个组成部分,改名为JBoss jBPM.以Struts2框架为jBPM开发的工作流引擎,便捷地增加一个文件上传下载模块.整合思想是利用Struts2作为工作流引擎的MVC框架,将Commons-Fileuplod 作为容器,把Struts2的控制与业务逻辑组件相分离.下面是嵌入了Commons-fileUpload组件的Struts2框架关于上传下载应用的配置文件和核心代码:1)Struts.xml配置文件核心代码:上述代码为实现将Commons-fileupload组件中的解释器嵌入到Struts2中的配置文件代码和通过Stream字段类型以二进制流的形式传输数据库内数据的核心代码.下面为了凸显文中提出整合方式的优势,通过标准测试上传了4次大小不同的文件,上传不同大小文件耗时对比结果见表1.表1 不同组件在上传文件时的耗时对比 ms组件名称2 M 20 M 45 M 200 M COS 245 2 391 5 000 53 520 Commons-fileupload 297 3 293 6 700 76 210 JspSmartUpload 536 4 371 8 745堆栈溢出为使对比更直观、明显,这里参照上述数据绘制了具体如图4所示,嵌入不同组件的Struts2框架上传速度对比图.图4 嵌入不同组件的Struts2框架上传速度对比一般系统所要上传下载的文件大小主要集中在2~45 M区间内,但难免有可能会出现上传下载大文件的时候,因此选择上述几个文件大小作为测试上传的测试集[6].根据图4可以看出,上传20 M左右的文件时,采用了Commons-fileupload和COS组件的速度性能相差无几,但是JspSmartUpload与其他2种的差距就已经很明显了,当文件大于200 M时,JspSmartUpload已经因为堆栈溢出而崩溃了.通过表格和对比图可以发现,采用Commons-fileupload组件的系统无论从速度还是稳定性上都比JspSmartUpload组件有很大提高.Commons-fileupload与COS在上传速度与稳定性上差别不大,但是Commons-fileupload比COS更易于整合到Struts2框架中;因此从系统整体的开发效率和性能上来说,Commons-fileupload组件无疑是最佳选择,同时也更适合以业务为主的web环境.6 结束语提出了一种将Commons-fileupload组件嵌入到Struts2中形成的新框架,该框架已成功地应用于多种文件上传下载系统中.通过实际使用证明:带有新元素的Struts2框架,提高了文件上传下载的速度,通过文件动态更名,增加了文件上传下载的实用性.通过实验证明了新框架在文件上传速度和准确率上的优越性.基于Struts2形成的新框架不拘泥于一种文件形式,符合文件上传下载的通用性,有利于文件上传下载功能的推广,具有良好的应用前景.参考文献:[1]WU M.Analytical method for the lateral buckling of the struts in beam string structures[J].Engineering Structures,2008,30(9):2301-2310. [2]SAHOO D K,GAUTERM R K.Strength and deformation characteristics of bottle-shaped struts[J].Magazine of Concrete Research,2008,8(9):137-144.[3]于银山,胡正华.基于Struts2框架的Web应用开发[J].电脑知识与技术,2009,5(16):59-62.[4]段旭光,李岚,董立岩,等.基于HTTP文件上传进度显示组件的设计及实现[J].吉林大学学报:信息科学版,2006,24(1):89-93.[5]李林珊,郑丽娅.基于JXL的数据导入导出处理[J].计算机软件与应用,2008,27(9):95-96.[6]刘锦锦.基于Struts框架的Web网站开发及数据分析[D].北京:北京化工大学,2005.。

java实现文件下载.

java实现文件下载.

在BlogJava上已经有一位作者阐述了文件上传的问题, 地址是在Struts 2中实现文件上传 , 因此我就不再讨论那个话题了。

我今天简单介绍一下Struts 2的文件下载问题。

我们的项目名为 struts2hello ,所使用的开发环境是MyEclipse 6,当然其实用哪个 IDE 都 是一样的,只要把类库放进去就行了,文件下载不需要再加入任何额外的包。

读者可以参考 文档:http://beansoft.java­/myeclipse_doc_cn/struts2_demo.pdf ,来了解怎么下载 和配置基本的 Struts 2开发环境。

为了便于大家对比,我把完整的 struts.xml 的配置信息列出来:Xml代码1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE struts PUBLIC3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"4 "/dtds/struts-2.0.dtd">56 <struts>7 <package name="default" extends="struts-default" >8 <!-- 在这里添加 Action 定义 -->910 <!-- 简单文件下载 -->11 <action name="download" class="example.FileDownloadAction">12 <result name="success" type="stream">13 <param name="contentType">text/plain</param>14 <param name="inputName">inputStream</param>15 <paramname="contentDisposition">attachment;filename="struts2中文.txt"</param>16 <param name="bufferSize">4096</param>17 </result>18 </action>1920 <!-- 文件下载,支持中文附件名 -->21 <action name="download2" class="example.FileDownloadAction2">22 <!-- 初始文件名 -->23 <param name="fileName">Struts 中文附件.txt</param>24 <result name="success" type="stream">25 <param name="contentType">text/plain</param>26 <param name="inputName">inputStream</param>27 <!-- 使用经过转码的文件名作为下载文件名, downloadFileName属性28 对应 action类中的方法 getDownloadFileName() -->29 <paramname="contentDisposition">attachment;filename="${downloadFileName}"</param>30 <param name="bufferSize">4096</param>31 </result>32 </action>3334 <!-- 下载现有文件 -->35 <action name="download3" class="example.FileDownloadAction3">36 <param name="inputPath">/download/系统说明.doc</param>37 <!-- 初始文件名 -->38 <param name="fileName">系统说明.doc</param>39 <result name="success" type="stream">40 <paramname="contentType">application/octet-stream;charset=ISO8859-1</param>41 <param name="inputName">inputStream</param>42 <!-- 使用经过转码的文件名作为下载文件名, downloadFileName属性43 对应 action类中的方法 getDownloadFileName() -->44 <paramname="contentDisposition">attachment;filename="${downloadFileName}"</param>45 <param name="bufferSize">4096</param>46 </result>47 </action>4849 </package>5051 </struts>Xml代码52 <?xml version="1.0" encoding="UTF-8" ?>53 <!DOCTYPE struts PUBLIC54 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"55 "/dtds/struts-2.0.dtd">5657 <struts>58 <package name="default" extends="struts-default" >59 <!-- 在这里添加 Action 定义 -->6061 <!-- 简单文件下载 -->62 <action name="download" class="example.FileDownloadAction">63 <result name="success" type="stream">64 <param name="<SPAN class=hilite3><SPANstyle="BACKGROUND-COLOR:#aaffaa">contentType</SPAN></SPAN>">text/plain</param>65 <param name="inputName">inputStream</param>66 <paramname="contentDisposition">attachment;filename="<SPAN class=hilite1><SPANstyle="BACKGROUND-COLOR: #ffff00">struts2</SPAN></SPAN>中文.txt"</param>67 <param name="bufferSize">4096</param>68 </result>69 </action>7071 <!-- 文件下载,支持中文附件名 -->72 <action name="download2" class="example.FileDownloadAction2">73 <!-- 初始文件名 -->74 <param name="fileName">Struts 中文附件.txt</param>75 <result name="success" type="stream">76 <param name="<SPAN class=hilite3><SPANstyle="BACKGROUND-COLOR:#aaffaa">contentType</SPAN></SPAN>">text/plain</param>77 <param name="inputName">inputStream</param>78 <!-- 使用经过转码的文件名作为下载文件名, downloadFileName 属性79 对应 action类中的方法 getDownloadFileName() -->80 <paramname="contentDisposition">attachment;filename="${downloadFileName}"</param>81 <param name="bufferSize">4096</param>82 </result>83 </action>8485 <!-- 下载现有文件 -->86 <action name="download3" class="example.FileDownloadAction3">87 <param name="inputPath">/download/系统说明.<SPANclass=hilite5>doc</SPAN></param>88 <!-- 初始文件名 -->89 <param name="fileName">系统说明.<SPANclass=hilite5>doc</SPAN></param>90 <result name="success" type="stream">91 <param name="<SPAN class=hilite3><SPANstyle="BACKGROUND-COLOR:#aaffaa">contentType</SPAN></SPAN>">application/octet-stream;charset=ISO885 9-1</param>92 <param name="inputName">inputStream</param>93 <!-- 使用经过转码的文件名作为下载文件名, downloadFileName 属性94 对应 action类中的方法 getDownloadFileName() -->95 <paramname="contentDisposition">attachment;filename="${downloadFileName}"</param>96 <param name="bufferSize">4096</param>97 </result>98 </action>99100 </package>101102</struts>Struts 2中对文件下载做了直接的支持,相比起自己辛辛苦苦的设置种种HTTP 头来说,现 在实现文件下载无疑要简便的多。

jspstruts1struts2上传文件

jspstruts1struts2上传文件

一.在JSP环境中利用Commons-fileupload组件实现文件上传1.页面upload.jsp清单如下:Java代码1.<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>2.3.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.01 Transitional//EN">4.<html>5. <head>6. <title>The FileUpload Demo</title>7. </head>8.9. <body>10. <form action="UploadFile" method="post" enctype="multipart/form-data">11. <p><input type="text" name="fileinfo" value="">文件介绍</p>12. <p><input type="file" name="myfile" value="阅读文件"></p>13. <p><input type="submit" value="上传"></p>14. </form>15. </body>16.</html>注意:在上传表单中,既有一般文本域也有文件上传域2.FileUplaodServlet.java清单如下:Java代码1.package org.chris.fileupload;2.3.import java.io.File;4.import java.io.IOException;5.import java.util.Iterator;6.import java.util.List;7.8.import javax.servlet.ServletException;9.import javax.servlet.http.*;10.11.import org.apachemons.fileupload.FileItem;12.import org.apachemons.fileupload.FileItemFactory;13.import org.apachemons.fileupload.disk.DiskFileItemFactory;14.import org.apachemons.fileupload.servlet.ServletFileUpload;15.16.public class FileUplaodServlet extends HttpServlet {17.18. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {19. doPost(request, response);20. }21.22. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {23.24. request.setCharacterEncoding("UTF-8");25.26. //文件的上传部份27. boolean isMultipart = ServletFileUpload.isMultipartContent(request);28.29. if(isMultipart)30. {31. try {32. FileItemFactory factory = new DiskFileItemFactory();33. ServletFileUpload fileload = new ServletFileUpload(factory);34.35.// 设置最大文件尺寸,那个地址是4MB36. fileload.setSizeMax(4194304);37. List<FileItem> files = fileload.parseRequest(request);38. Iterator<FileItem> iterator = files.iterator();39. while(iterator.hasNext())40. {41. FileItem item = iterator.next();42. if(item.isFormField())43. {44. String name = item.getFieldName();45. String value = item.getString();46. System.out.println("表单域名为: " + name + "值为: " + value);47. }else48. {49. //取得取得文件名,此文件名包括途径50. String filename = item.getName();51. if(filename != null)52. {53. File file = new File(filename);54. //若是此文件存在55. if(file.exists()){56. File filetoserver = new File("d:\\upload\\",file.getName());57. item.write(filetoserver);58. System.out.println("文件 " + filetoserver.getName() + " 上传成功!!");59. }60. }61. }62. }63. } catch (Exception e) {64. System.out.println(e.getStackTrace());65. }66. }67. }68.}3.web.xml清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<web-app version="2.4"3. xmlns="java.sun/xml/ns/j2ee"4. xmlns:xsi="/2001/XMLSchema-instance"5. xsi:schemaLocation="java.sun/xml/ns/j2ee6. java.sun/xml/ns/j2ee/web-app_2_4.xsd">7.8. <servlet>9. <servlet-name>UploadFileServlet</servlet-name>10. <servlet-class>11. org.chris.fileupload.FileUplaodServlet12. </servlet-class>13. </servlet>14.15. <servlet-mapping>16. <servlet-name>UploadFileServlet</servlet-name>17. <url-pattern>/UploadFile</url-pattern>18. </servlet-mapping>19.20. <welcome-file-list>21. <welcome-file>/Index.jsp</welcome-file>22. </welcome-file-list>23.24.</web-app>二.在strut1.2中实现1.上传页面file.jsp 清单如下:Java代码1.<%@ page language="java" pageEncoding="ISO-8859-1"%>2.<%@ taglib uri="/struts/tags-bean" prefix="bean"%>3.<%@ taglib uri="/struts/tags-html" prefix="html"%>4.5.<html>6. <head>7. <title>JSP for FileForm form</title>8. </head>9. <body>10. <html:form action="/file" enctype="multipart/form-data">11. <html:file property="file1"></html:file>12. <html:submit/><html:cancel/>13. </html:form>14. </body>15.</html>2.FileAtion.java的清单如下:Java代码1./*2. * Generated by MyEclipse Struts3. * Template path: templates/java/JavaClass.vtl4. */5.package action;6.7.import java.io.*;8.9.import javax.servlet.http.HttpServletRequest;10.import javax.servlet.http.HttpServletResponse;11.import org.apache.struts.action.Action;12.import org.apache.struts.action.ActionForm;13.import org.apache.struts.action.ActionForward;14.import org.apache.struts.action.ActionMapping;15.import org.apache.struts.upload.FormFile;16.17.import form.FileForm;18.19./**20. * @author Chris21. * Creation date: 6-27-202022. *23. * XDoclet definition:24. * @struts.action path="/file" name="fileForm" input="/file.jsp"25. */26.public class FileAction extends Action {27. /*28. * Generated Methods29. */30.31. /**32. * Method execute33. * @param mapping34. * @param form35. * @param request36. * @param response37. * @return ActionForward38. */39. public ActionForward execute(ActionMapping mapping, ActionForm form,40. HttpServletRequest request, HttpServletResponse response) {41. FileForm fileForm = (FileForm) form;42. FormFile file1=fileForm.getFile1();43. if(file1!=null){44. //上传途径45. String dir=request.getSession(true).getServletContext().getRealPath("/upload");46. OutputStream fos=null;47. try {48. fos=new FileOutputStream(dir+"/"+file1.getFileName());49. fos.write(file1.getFileData(),0,file1.getFileSize());50. fos.flush();51. } catch (Exception e) {52. // TODO Auto-generated catch block53. e.printStackTrace();54. }finally{55. try{56. fos.close();57. }catch(Exception e){}58. }59. }60. //页面跳转61. return mapping.findForward("success");62. }63.}3.FileForm.java的清单如下:Java代码1.package form;2.3.import javax.servlet.http.HttpServletRequest;4.import org.apache.struts.action.ActionErrors;5.import org.apache.struts.action.ActionForm;6.import org.apache.struts.action.ActionMapping;7.import org.apache.struts.upload.FormFile;8.9./**10. * @author Chris11. * Creation date: 6-27-202012. *13. * XDoclet definition:14. * @struts.form name="fileForm"15. */16.public class FileForm extends ActionForm {17. /*18. * Generated Methods19. */20. private FormFile file1;21. /**22. * Method validate23. * @param mapping24. * @param request25. * @return ActionErrors26. */27. public ActionErrors validate(ActionMapping mapping,28. HttpServletRequest request) {29. // TODO Auto-generated method stub30. return null;31. }32.33. /**34. * Method reset35. * @param mapping36. * @param request37. */38. public void reset(ActionMapping mapping, HttpServletRequest request) {39. // TODO Auto-generated method stub40. }41.42. public FormFile getFile1() {43. return file1;44. }45.46. public void setFile1(FormFile file1) {47. this.file1 = file1;48. }49.}4.struts-config.xml的清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "/d tds/struts-config_1_2.dtd">3.4.<struts-config>5. <data-sources />6. <form-beans >7. <form-bean name="fileForm" type="form.FileForm" />8.9. </form-beans>10.11. <global-exceptions />12. <global-forwards />13. <action-mappings >14. <action15. attribute="fileForm"16. input="/file.jsp"17. name="fileForm"18. path="/file"19. type="action.FileAction"20. validate="false">21. <forward name="success" path="/file.jsp"></forward>22. </action>23.24. </action-mappings>25.26. <message-resources parameter="ApplicationResources" />27.</struts-config>5.web.xml代码清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<web-app xmlns="java.sun/xml/ns/j2ee" xmlns:xsi="w/2001/XMLSchema-instance" version="2.4" xsi:schemaLocatio n="java.sun/xml/ns/j2ee java.sun/xml/ns/j2ee/web-app_2_4.xsd">3. <servlet>4. <servlet-name>action</servlet-name>5. <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>6. <init-param>7. <param-name>config</param-name>8. <param-value>/WEB-INF/struts-config.xml</param-value>9. </init-param>10. <init-param>11. <param-name>debug</param-name>12. <param-value>3</param-value>13. </init-param>14. <init-param>15. <param-name>detail</param-name>16. <param-value>3</param-value>17. </init-param>18. <load-on-startup>0</load-on-startup>19. </servlet>20. <servlet-mapping>21. <servlet-name>action</servlet-name>22. <url-pattern>*.do</url-pattern>23. </servlet-mapping>24.</web-app>三.在struts2中实现(以图片上传为例)1.FileUpload.jsp代码清单如下:Java代码1.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>2.<%@ taglib prefix="s" uri="/struts-tags" %>3.<html>4. <head>5. <title>The FileUplaodDemo In Struts2</title>6. </head>7.8. <body>9. <s:form action="fileUpload.action" method="POST" enctype="multipart/form-data">10. <s:file name="myFile" label="MyFile" ></s:file>11. <s:textfield name="caption" label="Caption"></s:textfield>12. <s:submit label="提交"></s:submit>13. </s:form>14. </body>15.</html>2.ShowUpload.jsp的功能清单如下:Java代码1.<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>2.<%@ taglib prefix="s" uri="/struts-tags" %>3.<html>4. <head>5. <title>ShowUpload</title>6. </head>7.8. <body>9. <div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" >10. <img src ='UploadImages/<s:property value ="imageFileName"/> '/>11. <br />12. <s:property value ="caption"/>13. </div >14. </body>15.</html>3.FileUploadAction.java的代码清单如下:Java代码1.package com.chris;2.3.import java.io.*;4.import java.util.Date;5.6.import org.apache.struts2.ServletActionContext;7.8.9.import com.opensymphony.xwork2.ActionSupport;10.11.public class FileUploadAction extends ActionSupport{12.13. private static final long serialVersionUID = 572146812454l;14. private static final int BUFFER_SIZE = 16 * 1024 ;15.16. //注意,文件上传时<s:file/>同时与myFile,myFileContentType,myFileFileName绑定17. //因此同时要提供myFileContentType,myFileFileName的set方式18.19. private File myFile; //上传文件20. private String contentType;//上传文件类型21. private String fileName; //上传文件名22. private String imageFileName;23. private String caption;//文件说明,与页面属性绑定24.25. public void setMyFileContentType(String contentType) {26. System.out.println("contentType : " + contentType);27. this .contentType = contentType;28. }29.30. public void setMyFileFileName(String fileName) {31. System.out.println("FileName : " + fileName);32. this .fileName = fileName;33. }34.35. public void setMyFile(File myFile) {36. this .myFile = myFile;37. }38.39. public String getImageFileName() {40. return imageFileName;41. }42.43. public String getCaption() {44. return caption;45. }46.47. public void setCaption(String caption) {48. this .caption = caption;49. }50.51. private static void copy(File src, File dst) {52. try {53. InputStream in = null ;54. OutputStream out = null ;55. try {56. in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);57. out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);58. byte [] buffer = new byte [BUFFER_SIZE];59. while (in.read(buffer) > 0 ) {60. out.write(buffer);61. }62. } finally {63. if ( null != in) {64. in.close();65. }66. if ( null != out) {67. out.close();68. }69. }70. } catch (Exception e) {71. e.printStackTrace();72. }73. }74.75. private static String getExtention(String fileName) {76. int pos = stIndexOf(".");77. return fileName.substring(pos);78. }79.80.@Override81. public String execute() {82. imageFileName = new Date().getTime() + getExtention(fileName);83. File imageFile = new File(ServletActionContext.getServletContext().getRealPath("/UploadImages" ) + "/" + imageFileN ame);84. copy(myFile, imageFile);85. return SUCCESS;86. }87.}注:现在仅为方便实现Action因此继承ActionSupport,并Overrider execute()方式在struts2中任何一个POJO都能够作为Action4.struts.xml清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE struts PUBLIC3. "-//Apache Software Foundation//DTD Struts Configuration2.0//EN"4. "/dtds/struts-2.0.dtd">5.<struts>6. <package name="example" namespace="/" extends="struts-default">7. <action name="fileUpload" class="com.chris.FileUploadAction">8. <interceptor-ref name="fileUploadStack"/>9. <result>/ShowUpload.jsp</result>10. </action>11. </package>12.</struts>5.web.xml清单如下:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.<web-app version="2.4"3. xmlns="java.sun/xml/ns/j2ee"4. xmlns:xsi="/2001/XMLSchema-instance"5. xsi:schemaLocation="java.sun/xml/ns/j2ee6. java.sun/xml/ns/j2ee/web-app_2_4.xsd">7. <filter >8. <filter-name > struts-cleanup </filter-name >9. <filter-class >10. org.apache.struts2.dispatcher.ActionContextCleanUp11. </filter-class >12. </filter >13. <filter-mapping >14. <filter-name > struts-cleanup </filter-name >15. <url-pattern > /* </url-pattern >16. </filter-mapping >17.18. <filter>19. <filter-name>struts2</filter-name>20. <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>21. </filter>22. <filter-mapping>23. <filter-name>struts2</filter-name>24. <url-pattern>/*</url-pattern>25. </filter-mapping>26. <welcome-file-list>27. <welcome-file>Index.jsp</welcome-file>28. </welcome-file-list>29.30.</web-app>。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Socket bind failed: [730048]2009-12-12struts1.3 上传下载文件名乱码文章分类:Java编程关键字: struts 浏览器兼容吸收了很多网上的方案,发现掺合起来才好使。

1. 上传 form传参 a要使用过滤器utf-8 b页面设置成utf-8 c 使用struts1.1以上版本2. 下载 url传参,过滤器居然不好用。

把tomcat server.xml URIEncode设成utf-8传进来的参数终于不是乱码了。

但是下载时的名字还是乱码。

又在网上查了好多方法 URLEncode 啥的都不好用开始设成 String name = newString(uForm.getFileName().getBytes("utf-8"),"ISO8859_1");firefox下载的名字终于对了,ie还是乱码....最后设成 String name = new String(uForm.getFileName().getBytes(""), "ISO8859_1");最后是这个写的终于通过了下载时都是正确的中文名字了。

贴代码吧~ 没有用到spring action 继承struts的就好了没必要继承ActionSupportstruts-config.xmlXml代码1.<!-- upload -->2.<action attribute="uploadForm"name="uploadForm"path="/upload/upload"3.scope="request"4.type="com.travelsky.fgos.web.presentation.actions.upload.UploadAction">5.<forward name="success"path="/upload/upload.jsp"/>6.<forward name="failure"path="/upload/fileList.jsp"/>7.</action>8.<action attribute="uploadForm"name="uploadForm"path="/upload/list"9.scope="request"10. type="com.travelsky.fgos.web.presentation.actions.upload.ListAction">11. <forward name="success"path="/upload/fileList.jsp"/>12. <forward name="failure"path="/upload/fileList.jsp"/>13. </action>14. <action attribute="uploadForm"name="uploadForm"path="/upload/download"15. scope="request"16. type="com.travelsky.fgos.web.presentation.actions.upload.DownloadAction">17. <forward name="success"path="/upload/fileList.jsp"/>18. <forward name="failure"path="/upload/fileList.jsp"/>19. </action>20. <action attribute="uploadForm"name="uploadForm"path="/upload/delete"21. scope="request"22. type="com.travelsky.fgos.web.presentation.actions.upload.DeleteAction">23. <forward name="success"path="/upload/fileList.jsp"/>24. <forward name="failure"path="/upload/fileList.jsp"/>25. </action>26. <!-- upload -->upload.jspJsp代码1.<%@ page language="java" contentType="text/html; charset=utf-8"2. pageEncoding="utf-8"%>3.<%@ taglib uri="/tags-bean" prefix="bean" %>4.<%@ taglib uri="/tags-html" prefix="html" %>5.<%@ taglib uri="/tags-logic" prefix="logic" %>6.7.<%@ taglib uri="/jsp/jstl/core" prefix="c" %>8.<%@ taglib uri="/jsp/jstl/functions" prefix="fn" %>9.<%@ taglib uri="/jsp/jstl/fmt" prefix="fmt"%>10.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd">11.<html:html>12. <head>13. <meta http-equiv="Content-Type" content="text/html;utf-8" />14. <meta http-equiv="pragma" content="no-cache" />15. <meta http-equiv="cache-control" content="no-cache" />16. <meta http-equiv="cache-control" content="no-store" />17. <meta http-equiv="expires" content="0" />18.19. <link rel="stylesheet" type="text/css" href="../css/upload.css" />20. <script type="text/javascript" src="../js/upload.js"></script>21. <script type="text/javascript" src="../js/net.js"></script>22. <title>文件管理</title>23. </head>24. <body onload="listFile()">25. <div id="title"><h3>文件管理</h3></div>26. <div id="fileUploadDiv">27. <html:form action="upload/upload" method="post" enctype="multipart/form-data">28. <br />29. 选择文件:<html:file property="file" /><html:submit value="上传文件"/>30. 请输入文件名:<html:text property="fileName"></html:text>(不输入默认使用上传文件名)31. <iframe name="hidden_frame" id="hidden_frame" style="display:none"></iframe>32. </html:form>33. </div>34. <br/>35. <div id="fileListDiv">36.37. </div>38. </body>39.</html:html>filelist.jspJsp代码1.<%@ page language="java" contentType="text/html; charset=utf-8"2. pageEncoding="utf-8"%>3.<%@ taglib uri="/tags-bean" prefix="bean" %>4.<%@ taglib uri="/tags-html" prefix="html" %>5.<%@ taglib uri="/tags-logic" prefix="logic" %>6.7.<%@ taglib prefix="c" uri="/jsp/jstl/core"%>8.<%@ taglib prefix="fn" uri="/jsp/jstl/functions"%>9.10.<table>11. <tr class="title">12. <td>13. 编号14. </td>15. <td>16. 文件名17. </td>18. <td>19. 上传日期20. </td>21. <td>22. 大小(KB)23. </td>24. <td>25. 操作126. </td>27. <td>28. 操作229. </td>30. </tr>31. <c:forEach var="item" items="${fileInfoList}" varStatus="status">32. <tr <c:if test="${status.count%2 == 0}">class="oddLine"</c:if>33. <c:if test="${status.count%2 == 1}">class="evenLine"</c:if>>34. <td class="mid">35. <c:out value="${status.count}"></c:out>36. </td>37. <td class="content">38. <c:out value="${item[0]}"></c:out>39. </td>40. <td class="mid">41. <c:out value="${item[1]}"></c:out>42. </td>43. <td class="mid">44. <c:out value="${item[2]}"></c:out>45. </td>46. <td class="mid">47. <html:button property="btn" styleId="" onclick="deleteFile('${item[0]}')">下载</html:button>48. </td>49. <td class="mid">50. <html:button property="btn" onclick="download('${item[0]}')">下载</html:button>51. <%//<html:link href="download.do?fileName=${item[0]}">下载</html:link>%>52. </td>53. </tr>54. </c:forEach>55.</table>upload.jsJs代码1.function callback(){2.3.}4.5.function $(id) {6. return document.getElementById(id)7. //return "string" == typeof id ? document.getElementById(id) : id;8.}9.10.function listFile(){11. var url = "/fgosweb/upload/list.do";12. var params = ""13. var loader = new net.ContentLoader(url, showData, null, "POST",14. params);15.16.}17.18.function showData() {19. var text = this.req.responseText;20.21. //alert(text)22. if($("fileListDiv")){23. $('fileListDiv').innerHTML = text;24. }25.}26.27.function download(fileName){28. var url = "/fgosweb/upload/download.do";29. var params = "?fileName=" + fileName;30. window.location = url + params;31. //window.open("/fgosweb/upload/download.do" + params);32.}33.34.function deleteFile(fileName){35. var url = "/fgosweb/upload/delete.do";36. var params = "?fileName=" + fileName;37. window.location = url + params;38.}net.jsJs代码1./*2.url-loading object and a request queue built on top of it*3.* */4.5./* namespacing object */6.var net=new Object();7..READY_STATE_UNINITIALIZED=0;.READY_STATE_LOADING=1;.READY_STATE_LOADED=2;.READY_STATE_INTERACTIVE=3;.READY_STATE_COMPLETE=4;13.14.15./*--- content loader object for cross-browser requests ---*/.ContentLoader=function(url,onload,onerror,method,params,contentType){17. this.req=null;18. this.onload=onload;19. this.onerror=(onerror) ? onerror : this.defaultError;20. this.loadXMLDoc(url,method,params,contentType);21.}22..ContentLoader.prototype.loadXMLDoc=function(url,method,params,contentType){24. if (!method){25. method="GET";26. }27. if (!contentType && method=="POST"){28. contentType='application/x-www-form-urlencoded';29. }30. if (window.XMLHttpRequest){31. this.req=new XMLHttpRequest();//ff32. } else if (window.ActiveXObject){33. this.req=new ActiveXObject("Microsoft.XMLHTTP");//ie34. }35. if (this.req){36. try{37. var loader=this;38. this.req.onreadystatechange=function(){39. net.ContentLoader.onReadyState.call(loader);40. }41. this.req.open(method,url,true);42. if (contentType){43. this.req.setRequestHeader('Content-Type', contentType);44. }45. this.req.send(params);46. }catch (err){47. this.onerror.call(this);48. }49. }50.}51.52..ContentLoader.onReadyState=function(){54. var req=this.req;55. var ready=req.readyState;56. if (ready==net.READY_STATE_COMPLETE){57. var httpStatus=req.status;58. if (httpStatus==200 || httpStatus==0){59. this.onload.call(this);60. }else{61. this.onerror.call(this);62. }63. }64.}65..ContentLoader.prototype.defaultError=function(){67. alert("error fetching data!"68. +"\n\nreadyState:"+this.req.readyState69. +"\nstatus: "+this.req.status70. +"\nheaders: "+this.req.getAllResponseHeaders());71.}server.xmlXml代码1.<Connector2.rt="8011"maxHttpHeaderSize="8192"3.maxThreads="150"minSpareThreads="25"maxSpareThreads="75"4.enableLookups="false"redirectPort="8443"acceptCount="100"5.connectionTimeout="20000"disableUploadTimeout="true"URIEncoding="UTF-8"/>uploadAciton.javaJava代码1.package com.travelsky.fgos.web.presentation.actions.upload;2.3.import java.io.File;4.import java.io.FileNotFoundException;5.import java.io.FileOutputStream;6.import java.io.IOException;7.import java.io.InputStream;8.import java.io.UnsupportedEncodingException;9.10.import javax.servlet.http.HttpServletRequest;11.import javax.servlet.http.HttpServletResponse;12.13.import mons.logging.Log;14.import mons.logging.LogFactory;15.import org.apache.struts.action.Action;16.import org.apache.struts.action.ActionForm;17.import org.apache.struts.action.ActionForward;18.import org.apache.struts.action.ActionMapping;19.import org.apache.struts.upload.FormFile;20.import org.springframework.web.struts.ActionSupport;21.import com.travelsky.fgos.web.presentation.forms.upload.UploadForm;22.23.public class UploadAction extends ActionSupport {24. public ActionForward execute(ActionMapping mapping, ActionForm form,25. HttpServletRequest request, HttpServletResponse response) {26. Log logger = LogFactory.getLog(UploadAction.class);27. UploadForm uploadform = (UploadForm) form;28. String path = request.getSession().getServletContext().getRealPath(29. "/file/");30. FormFile file = null;31. try {32. file = uploadform.getFile();// 获取FormFile33. } catch (Exception e) {34. logger.debug(e);35. }36.37. File dir = new File(path);38. if (!dir.exists())39. dir.mkdirs();40. if (file != null) {41. try {42. FileOutputStream fos;43. if (uploadform.getFileName() == null44. || uploadform.getFileName().equals("")){45. fos = new FileOutputStream(dir + "/" + file.getFileName());46. } else {47. String suffix = file.getFileName().substring(48. file.getFileName().lastIndexOf("."));49. fos = new FileOutputStream(dir + "/"50. + uploadform.getFileName() + suffix);51. }52. fos.write(file.getFileData());// 开始写入53. fos.flush();54. fos.close();55.56. } catch (FileNotFoundException e) {57. // TODO Auto-generated catch block58. e.printStackTrace();59. return mapping.findForward("failure");60. } catch (IOException e) {61. // 获取文件流对象62. e.printStackTrace();63. return mapping.findForward("failure");64. }65.66. }67. // response.write("<script68. // type='text/javascript'>parent.callback('ok')</script>");69. return mapping.findForward("success");70.71. }72.}downlaodAction.javaJava代码1.package com.travelsky.fgos.web.presentation.actions.upload;2.3.import java.io.BufferedInputStream;4.import java.io.BufferedOutputStream;5.import java.io.File;6.import java.io.FileInputStream;7.import java.io.InputStream;8.import java.io.OutputStream;9.import .URLEncoder;10.11.import javax.servlet.http.HttpServletRequest;12.import javax.servlet.http.HttpServletResponse;13.14.import mons.logging.Log;15.import mons.logging.LogFactory;16.import org.apache.struts.action.ActionForm;17.import org.apache.struts.action.ActionForward;18.import org.apache.struts.action.ActionMapping;19.import org.springframework.web.struts.ActionSupport;20.21.import com.travelsky.fgos.web.presentation.forms.upload.UploadForm;22.23.public class DownloadAction extends ActionSupport {24.25. public ActionForward execute(ActionMapping mapping, ActionForm form,26. HttpServletRequest request, HttpServletResponse response) {27. // TODO Auto-generated method stub28. Log logger = LogFactory.getLog(DownloadAction.class);29. String path = request.getSession().getServletContext().getRealPath(30. "/file/");31. BufferedInputStream bis = null;32. BufferedOutputStream bos = null;33. OutputStream fos = null;34. InputStream fis = null;35. try {36. UploadForm uForm = (UploadForm) form;37. String fileName = path + "\\" + uForm.getFileName();38. String name = new String(uForm.getFileName().getBytes(),39. "ISO8859_1");40. File downloadFile = new File(fileName);41. fis = new FileInputStream(downloadFile);42. bis = new BufferedInputStream(fis);43. fos = response.getOutputStream();44. bos = new BufferedOutputStream(fos);45. //弹出下载对话框的关键代码46. response.setContentType("application/x-msdownload");47. response.setHeader("Content-disposition", "attachment;filename="48. + name);49. int bytesRead = 0;50. //用输入流进行先读,然后用输出流去写(缓冲输入输出流)51. byte[] buffer = new byte[8192];52. while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {53. bos.write(buffer, 0, bytesRead);54. }55. bos.flush();56. fis.close();57. bis.close();58. fos.close();59. bos.close();60. } catch (Exception e) {61. logger.debug(e);62. return mapping.findForward("failure");63. }64.65. return null;66. }67.68.}listAction.javaJava代码1.package com.travelsky.fgos.web.presentation.actions.upload;2.3.import java.io.File;4.import java.text.SimpleDateFormat;5.import java.util.ArrayList;6.import java.util.Calendar;7.import java.util.Date;8.import java.util.List;9.10.import javax.servlet.http.HttpServletRequest;11.import javax.servlet.http.HttpServletResponse;12.13.import org.apache.struts.action.ActionForm;14.import org.apache.struts.action.ActionForward;15.import org.apache.struts.action.ActionMapping;16.import org.springframework.web.struts.ActionSupport;17.18.public class ListAction extends ActionSupport {19. public ActionForward execute(ActionMapping mapping, ActionForm form,20. HttpServletRequest request, HttpServletResponse response){21.22. String path = request.getSession().getServletContext().getRealPath("/file/");23. try{24. //getFileInfo(path);25. request.setAttribute("fileInfoList", getFileInfo(path));26. }catch(Exception e){27. return mapping.findForward("failure");28. }29. return mapping.findForward("success");30.31.32. }33. public static List getFileInfo(String path){34.35. File file = new File(path);36. File[] array = file.listFiles();37.38. List fileInfoList = new ArrayList();39. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");40. for(int i=0;i<array.length;i++){41. List fileInfoItem = new ArrayList();42. if(array[i].isFile()){43. fileInfoItem.add(array[i].getName()); //0:name44. Date d = new Date(array[i].lastModified());45. fileInfoItem.add(sdf.format(d));//1:time46. fileInfoItem.add(new Long(array[i].length()/1024));//2:length47. //fileInfoItem.add(array[i].getPath());//3:path48. }49. fileInfoList.add(fileInfoItem);50. }51. System.out.print(fileInfoList);52. return fileInfoList;53. }54.}。

相关文档
最新文档