JAVA Web 之 struts2文件上传下载演示(一)(转)
JAVA Web 之 struts2文件上传下载演示(一)
一、文件上传演示
1.需要的jar包
大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/lib目录下面即可,需要的jar包如下图所示,其中的javax.servlet.jar是额外添加的,我到网上随便搜了一个下载地址http://ishare.iask.sina.com.cn/f/19185878.html?retcode=0,当然附件里面也有

2.配置web.xml
配置WebContent/WEB-INF/web.xml中的内容,如果你的项目已经配置好了struts,这步可以跳过.
Xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>UpDownDemo</display-name> <!-- 配置struts2 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 所有类型的请求都会被struts拦截 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.Web界面
其中有一点是特别需要注意的:定义form的时候,一定要添加enctype="multipart/form-data",并且一定要设置method="post"。
示例<form action="upload" enctype="multipart/form-data" method="post">
Html代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传演示</title>
</head>
<body>
<div align="center">
<form action="upload" enctype="multipart/form-data" method="post">
请选择文件<br>
<input type="file" name="file">
<br><br>
<input type="submit" value="确认上传">
</form>
</div>
</body>
</html>
4.后台JAVA代码
代码中有解析
java代码:
package action; import java.io.File;
import java.io.IOException;
import java.io.Serializable; import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext; import util.Encrypter; import com.opensymphony.xwork2.ActionSupport; /**
* @author Kingt.W
*/
@SuppressWarnings("serial")
public class FileAction extends ActionSupport implements Serializable {
/*
* 这里定义的变量,一定要跟网页的<input type="file" name="file">中的name属性的值一致.
* 如果网页中定义的是<input type="file" name="img">,那么在这里就要定义File img;
*/
private File file;
/*
* 这里定义的fileFileName一定要是xxxFileName的形式,否则无法取到文件的文件名.
* 其中xxx必须与上面定义的File类型的变量一致,如果上面定义的是File img,那么这里就
* 定义为String imgFileName
*/
private String fileFileName;
/*
* 这里定义的是文件的类型,如果不需要获取文件类型的话,可以不定义.
* 命名规则跟xxxFileName类似,这里一定要定义成xxxContentType形式.
*/
private String fileContentType;
/*
* 这这个变量是重命名后的文件名
*/
private String newFileName; //getters and setters我省略了,没有复制上来 public String upload() {
System.out.println("文件名:" + fileFileName);
System.out.println("文件类型:" + fileContentType); if (file != null) {
//文件的保存路径是WebContent/file目录下
String realpath = ServletActionContext.getServletContext()
.getRealPath("/file");
System.out.println("文件的保存路径:" + realpath); //文件的后缀
String suffix = fileFileName.substring(fileFileName
.lastIndexOf("."));
if (fileFileName.lastIndexOf(".") == -1) {
return INPUT;
} //上传以后,会重命名文件的名称,将其命名为全部是数字的文件名,防止可能出现的乱码.
//当然, 只是为了防止出现乱码,一般不会出现乱码
newFileName = Encrypter.randFileName() + suffix; File savefile = new File(new File(realpath), newFileName);
//如果保存的路径不存在,则新建
if (!savefile.getParentFile().exists())
savefile.getParentFile().mkdirs(); try {
//复制文件
FileUtils.copyFile(file, savefile);
System.out.println("文件上传成功");
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件上传失败");
return INPUT;
}
} return SUCCESS;
}
}
5.配置struts.xml
xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="struts" namespace="/" extends="struts-default">
<action name="upload" class="action.FileAction" method="upload">
<result name="success">download.jsp</result>
<result name="input">download.jsp</result>
</action>
</package>
</struts>
6.小注
至此,文件上传的功能就实现了。
<1>文件下载演示,请查看另一篇博客
http://titanseason.iteye.com/blog/1489473
<2>由于我是在J2EE Eclipse下建的项目,所以如果大家把附件下载以后,导入J2EE Eclipse是可以直接运行的,导入其他的IDE应该是没法直接运行,但是可以先新建好项目以后,把我的项目中的文件放到对应的目录下面即可
<3>效果图如下
选择文件,然后点击【确认上传】

上传文件的内容如下图所示

然后就可以在 eclipse工作空间\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\UpDownDemo\file下面找到刚刚上传的文件了。
打开文件,发现两个记事本中的内容一样(在java代码中我有解释为啥会把文件重命名)

- UpDownDemo.zip (3.2 MB)
- 下载次数: 132
JAVA Web 之 struts2文件上传下载演示(一)(转)的更多相关文章
- JAVA Web 之 struts2文件上传下载演示(二)(转)
JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...
- Struts2文件上传下载
Struts2文件上传 Struts2提供 FileUpload拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容,fileUpload拦截器 默认在defau ...
- Java Web(十二) commons-fileupload上传下载
今天心态正常...继续努力.. --WH 一.上传原理和代码分析. 上传:我们把需要上传的资源,发送给服务器,在服务器上保存下来. 下载:下载某一个资源时,将服务器上的该资源发送给浏览器. 难点:服务 ...
- java 如何实现大文件上传下载(传输)各种格式
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...
- Java使用 SFTP实现文件上传下载
package com.lijy.util; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import co ...
- Android与Asp.Net Web服务器的文件上传下载BUG汇总[更新]
遇到的问题: 1.java.io.IOException: open failed: EINVAL (Invalid argument)异常,在模拟器中的sd卡创建文件夹和文件时报错 出错原因可能是: ...
- Struts2之文件上传下载
本篇文章主要介绍如何利用struts2进行文件的上传及下载,同时给出我在编写同时所遇到的一些问题的解决方案. 文件上传 前端页面 <!-- 引入struts标签 --> <%@tag ...
- java web 文件上传下载
文件上传下载案例: 首先是此案例工程的目录结构:
- Struts2文件上传和下载(原理)
转自:http://zhou568xiao.iteye.com/blog/220732 1. 文件上传的原理:表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:1) ...
随机推荐
- Java程序发展之路
- datetime 和 smalldatetime
用于表示某天的日期和时间的数据类型. datetime 和 smalldatetime 表示某天的日期和时间. 数据类型 范围 精确度 datetime 1753 年 1 月 1 日到 9999 年 ...
- gtest的安装和测试[good]
一.前言 本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例. 二.下载 如果不记得网址, 直接在google里搜gtest,第一个 ...
- Java SE知识点
Java概述 Java的运行机制 JDK,JRE,JVM Java开发环境搭建 用记事本编写运行一个Hello World的完整过程 如何在Java中使用注释 使用Eclipse开发Java程序 使用 ...
- C# 6和 VB 12的最新特性列表
随着下个版本的C#发布日逐渐临近,那些还没有完成的特性必须被砍掉.最近从特性列表中被砍掉的特性包括主要构造函数(primary constructor)和声明表达式(declaration expre ...
- PHP libxml RSHUTDOWN安全限制绕过漏洞(CVE-2012-1171)
漏洞版本: PHP PHP 5.5.x 漏洞描述: BUGTRAQ ID: 65673 CVE(CAN) ID: CVE-2012-1171 PHP是一种HTML内嵌式的语言. PHP 5.x版本内的 ...
- find和findstr
find与findstr 例“ 在文件中搜索字符串. 1.findstr . 2.txt 或 Findstr "." 2.txt 从文件2.txt中查找任意字符,不包括空字符或空行 ...
- 【转】Android source build/envsetup.sh学习笔记
原文网址:http://blog.csdn.net/mliubing2532/article/details/7567164 如果你只需要修改某一个模块的内容,但是却每次都要执行make, 最后等待很 ...
- 《转》如何让你的网页加载时间降低到 1s 内
当初分析了定宽高值和定宽高比这两种常见的图片延迟加载场景,也介绍了他们的应对方案,还做了一点技术选型的工作. 经过一段时间的项目实践,在先前方案的基础上又做了很多深入的优化工作.最终将好奇心日报的网页 ...
- json包的loads dumps区分
符合json格式的字符串 --(json.laods)--> json(字典形式或是列表形式) --(json.dumps)--> 符合json格式的字符串