- 浏览: 190585 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
wangzhiangtony:
401的原因是,DrepositoryId这个配置的id跟你m ...
如何在本地库和私服中添加第三方的jar包 -
lily_better:
用到了,很好!谢谢~
用Java程序实现文件夹的复制 -
星夜的遐想:
dota_nec 写道以上都运行成功了,但是客户端怎么调用呢, ...
Tomcat 发布基于JAX-WS的项目流程小案例 -
dota_nec:
dota_nec 写道以上都运行成功了,但是客户端怎么调用呢, ...
Tomcat 发布基于JAX-WS的项目流程小案例 -
dota_nec:
以上都运行成功了,但是客户端怎么调用呢,请指教
Tomcat 发布基于JAX-WS的项目流程小案例
Struts2 上传和下载的原理:
Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件,二下载则是通过输入流InputStream 的方式获得服务端文件,然后设置关联方式为保存而不是打开,就可以了。
首先看看我的上传页面:
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <center> <form action="fileAction" method="post" enctype="multipart/form-data"> <!-- 上传者的姓名:<input type="text" name="uname" /><br><br> --> 上传文件一:<input type="file" name="files"><br></br> 上传文件二:<input type="file" name="files"><br></br> 上传文件三:<input type="file" name="files"><br></br> <input type="submit" name="method:doUpload" value="开始上传"/> </form> </center> </body> </html>
大家一定要注意的事和其他方式文件上传一样form
<form action="fileAction" method="post" enctype="multipart/form-data">
因为涉及到多文件上传因此我定义了几个相同name属性值的
<input type="file" name="files"><br></br>
因为我有用到数据库保存文件的信息因此我定义了一个实体类:
package com.lyl.entity; import java.util.Date; /** * MyFile entity. * * @author MyEclipse Persistence Tools */ public class MyFile implements java.io.Serializable { // Fields private String fileId; private String fileName; private String fileContentType; private Date fileUploadDate; // Constructors /** default constructor */ public MyFile() { } // Property accessors public String getFileId() { return this.fileId; } public void setFileId(String fileId) { this.fileId = fileId; } public String getFileName() { return this.fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public String getFileContentType() { return this.fileContentType; } public void setFileContentType(String fileContentType) { this.fileContentType = fileContentType; } public Date getFileUploadDate() { return this.fileUploadDate; } public void setFileUploadDate(Date fileUploadDate) { this.fileUploadDate = fileUploadDate; } }
然后我们看看后台如何处理上传的,我定义一个FileAction处理
页面如下:
package com.lyl.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import java.util.Map; import java.util.UUID; import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext; import com.lyl.dao.FileDAO; import com.lyl.dao.FileDaoImpl; import com.lyl.entity.MyFile; import com.opensymphony.xwork2.ActionContext; public class FileAcion { 用于保存文件的DAO类: private FileDAO fileDao=new FileDaoImpl(); //如果不提供set和get方法将不能在页面(通过对象.属性的格式)赋值 private MyFile myFile = new MyFile(); // 保存表单页面的上传文件的集合 private List<File> files; // 保存上传文件的文件名的集合 private List<String> filesFileName; // 保存上传文件的类型集合 private List<String> filesContentType; //下载相关的参数 //指定要下载文件的输入流 private InputStream is; //指定下载文件的类型 private String fileType; //指定下载文件的名字 private String fileName; public String getFileType() { return fileType; } public void setFileType(String fileType) { this.fileType = fileType; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public InputStream getIs() { return is; } public void setIs(InputStream is) { this.is = is; } // 上传文件的方法 public String doUpload() throws Exception { System.out.println("进入了上传的方法"); // 定义保存的路径 ServletContext application = ServletActionContext.getServletContext(); // 定义相对路径(定义的路为WebRoot目录下的指定位置) String realPath = application.getRealPath("/upload"); for(int i=0;i<files.size();i++){ //以每一个上传文件生成一个输入流 InputStream is=new FileInputStream(files.get(i)); //创建一个fileId作为文件在硬盘上保存的的名字 String fileId=UUID.randomUUID().toString().replace("-", ""); //创建个输出流(以目标文件生成的流) OutputStream os=new FileOutputStream(new File(realPath+"/"+fileId)); byte [] b=new byte[1024]; int len=is.read(b); while(len !=-1){ os.write(b, 0 ,b.length); len=is.read(b); } os.close(); is.close(); //给MyFile实体赋值 myFile.setFileId(fileId); myFile.setFileName(filesFileName.get(i)); myFile.setFileContentType(filesContentType.get(i)); fileDao.addFile(myFile); } return "success"; } //查询所有的的文件 public String listFile(){ System.out.println("进入了list方法"); List<MyFile> myFilList=fileDao.listFile(); ActionContext context=ActionContext.getContext(); Map request=(Map)context.get("request"); request.put("myFilList", myFilList); return "list"; } // 下载文件的方法 public String doDownLoad() throws Exception { System.out.println("进入了下载的方法"); ServletContext application=ServletActionContext.getServletContext(); //获得文件上传后的路径 String realPath=application.getRealPath("/upload"); System.out.println("下载文件编号为--"+myFile.getFileId()); myFile=fileDao.loadFile(myFile); this.fileName= new String(myFile.getFileName().getBytes(),"ISO8859-1"); this.fileType=myFile.getFileContentType(); File file=new File(realPath+"/"+myFile.getFileId()); this.is=new FileInputStream(file); return "down"; } public List<File> getFiles() { return files; } public void setFiles(List<File> files) { this.files = files; } public List<String> getFilesFileName() { return filesFileName; } public void setFilesFileName(List<String> filesFileName) { this.filesFileName = filesFileName; } public List<String> getFilesContentType() { return filesContentType; } public void setFilesContentType(List<String> filesContentType) { this.filesContentType = filesContentType; } public MyFile getMyFile() { return myFile; } public void setMyFile(MyFile myFile) { this.myFile = myFile; } }
最后看看,我们的配置文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <include file="struts-default.xml" /> <package name="myFile" extends="struts-default" > <action name="fileAction" class="com.lyl.action.FileAcion"> <result name="success" type="redirect">/fileAction!listFile.action</result> <result name="list">/fileList.jsp</result> <result name="down" type="stream"> <!-- 内容类型,例如:*.jpg就是image/jpeg --> <param name="contentType">${fileType}</param> <!-- 数据来源 --> <param name="inputName">is</param> <!-- 确保文件是被下载,而非打开 --> <param name="contentDisposition"> attachment;filename="${fileName}" </param> <!-- 缓存大小单位字节 --> <param name="bufferSize">4096</param> </result> </action> </package> </struts>
也就这些了,如有不同的意见可以交流下啊
发表评论
-
事务传播特性摘记
2015-11-12 23:32 1918在配置Hibernat的事务传播特性比较常用就是REQUI ... -
Hibernate中将HQL转换成SQL的方法
2015-11-09 18:46 2988public String hql2Sql(String h ... -
Atomikos实现分布式事务异常小结
2015-11-08 16:21 34002015-11-08 02:47:22:WARN ma ... -
Atomikos实现分布式事务开发小结
2015-11-08 16:10 1503由于项目中用到了操作多个数据库,并且要在通过Service方 ... -
使用springmvc的注意点
2015-11-08 15:44 6221、web.xml中配置DispatcherServlet ... -
java.lang.NullPointerException at org.hibernate.type.LongType.next(LongType.java
2015-04-04 19:05 29001、为了初步解决并发造成的问题,我们通常会在实体类上声明一 ... -
Hibernate显示DDL日志设置
2015-04-02 14:13 10491、默认情况下,有些时候需要将实体映射到数据库创建相应的表, ... -
无法在service中try catch 数据库异常的的解决方案
2015-01-25 00:03 2921例如有一个批量操作数据库的功能(例如数据导入),当某条数 ... -
mappedBy和@JoinColumn的相似和区别
2015-01-18 23:36 57341、在使用@OneToMany注解 ... -
HQL 主附表关联查询,返回主表结果集
2014-12-21 16:54 1175数据模型A Public classs ... -
Spring 与Ehcache实现基于方法的缓存
2014-06-17 12:16 1591基于方法的缓存,顾名思义; 就是缓存的级别是在方法上,并 ... -
Apache+Tomcat集群环境配置
2014-06-09 18:48 925一、web开发中,为什么需要tomcat集群,我个人认为有 ... -
SpringMVC配置多视图配置的优先级别问题
2014-05-11 23:14 948在使用springmvc集成jsp和freemarker时 ... -
JPA的注解小结
2013-03-27 18:44 1573在开发中基于注解的方式配置数据表与是实体之间的关联在开发过 ... -
Struts2获取request等对象的方法
2013-03-15 22:30 977写道 struts2里面有三种方法可以获取request ... -
Spring的任务调度管理
2012-10-17 09:38 1166最近在网上看到的一 ... -
Struts2中一个Action转到另一个Action以及传参的问题
2012-08-27 09:21 1717在WEB的开过程中,我们在使用Struts2中Action完成 ... -
Hibernate 二级缓存的配置和使用
2012-07-01 18:00 1093用Hibernate做了些项目感 ...
相关推荐
Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。
在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...
在Struts2中,文件上传和下载是常见的功能需求,对于用户交互和数据交换至关重要。以下是对这些知识点的详细阐述: 1. **文件上传**: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是一个Apache提供...
在Struts2中,文件的上传和下载是常见的功能需求,特别是在处理用户表单提交、数据交换或者提供资源下载服务时。这篇博客文章将探讨如何在Struts2框架下实现文件的上传和下载操作。 首先,我们需要了解文件上传的...
3.Struts2进行下载处理,能对上传的所有文件进行下载(多个) 4.文件保存的名称UUID生成,不过显示并下载的名称都是原文件名称 (通过UploadFiles处理) 5.对配置文件中的路径可以进行动态读取(不重启服务器) ...
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括文件上传和下载。在Struts2中处理文件上传和下载是常见的需求,对于构建交互式的Web应用来说至关重要。以下将详细介绍Struts2中如何实现这两个...
在这个特定的场景中,我们关注的是如何使用Struts来实现文件的上传和下载功能。这个功能对于任何Web应用来说都是非常重要的,因为它允许用户交互地处理数据和资源。 首先,我们需要理解文件上传的基本流程。在...
在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...
在Struts2中,文件上传和下载是常见的功能,对于用户交互和数据交换至关重要。这篇内容将深入讲解如何在Struts2中实现多文件的上传和下载。 1. **文件上传** 文件上传在Web应用中常常用于让用户提交各种类型的文件...
在实际项目中,文件上传和下载功能是必不可少的,本实例将详细讲解如何在Struts2框架下实现单个文件及多个文件的上传与下载。 首先,我们需要在Struts2的配置文件(struts.xml)中添加相关的Action配置,以便处理文件...
在基于Struts2的文件上传下载功能中,它提供了处理用户上传文件和提供文件下载的服务。这个完整的源代码是实现这些功能的一个实例,经过测试确保了其正确性和可用性。 首先,我们要理解Struts2中的Action类。Action...
在这个"Struts2之struts2文件上传详解案例struts011"中,我们将深入探讨如何实现这一功能。 首先,我们需要了解Struts2中的Action类,它是处理用户请求的核心组件。为了支持文件上传,我们需要创建一个继承自`org....
总的来说,Struts2的多文件上传通过引入Apache Commons库,提供了简洁的API和配置,使得开发者能轻松处理用户上传的多个文件。无论是使用List集合还是数组,核心原理都是相同的,只是接收上传文件的对象类型不同。...
综上所述,Struts2文件上传下载和表单重复提交涉及多个技术点,包括Struts2的配置、文件操作、HTTP响应头设置、安全性和异常处理。理解并熟练掌握这些知识点,对于构建健壮的Web应用程序至关重要。
Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中,提供了丰富的功能,包括文件的上传和下载。在本项目中,我们关注的是如何使用Struts2来实现实时的文件交互操作,即文件的上传与...
在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户在Web表单中提交的文件,如图片、文档等。下面将详细介绍Struts2中文件上传和下载的实现方法。 ### 1. 文件上传 #### 1.1 配置Struts2 首先,我们...
通过以上步骤,你可以实现一个基于Struts2和Hibernate的文件上传与动态下载系统。这个系统能够处理用户上传的文件,将其保存到服务器,同时提供动态下载功能,允许用户根据需要下载文件。在实际开发中,还需要考虑...
Struts1和Struts2是两个非常著名的Java Web框架,它们都提供了处理文件上传和下载的功能,但实现方式有所不同。本文将深入探讨这两个框架在文件操作方面的具体实现。 首先,让我们了解一下Struts1中的文件上传功能...