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代码中我有解释为啥会把文件重命名)

 

JAVA Web 之 struts2文件上传下载演示(一)(转)的更多相关文章

  1. JAVA Web 之 struts2文件上传下载演示(二)(转)

    JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...

  2. Struts2文件上传下载

    Struts2文件上传 Struts2提供 FileUpload拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容,fileUpload拦截器 默认在defau ...

  3. Java Web(十二) commons-fileupload上传下载

    今天心态正常...继续努力.. --WH 一.上传原理和代码分析. 上传:我们把需要上传的资源,发送给服务器,在服务器上保存下来. 下载:下载某一个资源时,将服务器上的该资源发送给浏览器. 难点:服务 ...

  4. java 如何实现大文件上传下载(传输)各种格式

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  5. Java使用 SFTP实现文件上传下载

    package com.lijy.util; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import co ...

  6. Android与Asp.Net Web服务器的文件上传下载BUG汇总[更新]

    遇到的问题: 1.java.io.IOException: open failed: EINVAL (Invalid argument)异常,在模拟器中的sd卡创建文件夹和文件时报错 出错原因可能是: ...

  7. Struts2之文件上传下载

    本篇文章主要介绍如何利用struts2进行文件的上传及下载,同时给出我在编写同时所遇到的一些问题的解决方案. 文件上传 前端页面 <!-- 引入struts标签 --> <%@tag ...

  8. java web 文件上传下载

    文件上传下载案例: 首先是此案例工程的目录结构:

  9. Struts2文件上传和下载(原理)

    转自:http://zhou568xiao.iteye.com/blog/220732 1.    文件上传的原理:表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:1)     ...

随机推荐

  1. Java多态的体现之接口

    /** * * @author Administrator * 功能:接口体现多态 */ package com.test4; public class Test { public static vo ...

  2. Ubuntu zookeeper-3.5.0-alpha启动错误 zkEnv.sh: Syntax error: "(" unexpected (expecting "fi")(转)

    昨天小猿我把Ubuntu Server64位上的 zookeeper换成了最新版本的,结果启动的时候出错:之前zookeeper-3.3.6是没有任何问题的,换成了zookeeper3.5出现了下面的 ...

  3. 155. Min Stack

    题目: Design a stack that supports push, pop, top, and retrieving the minimum element in constant time ...

  4. linux中fork()函数详解(原创!!实例讲解)

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...

  5. rc522 ,pn544区别

    请问 我们之前用的刷卡的  是用 rc522  ,,pn544和这个有什么区别? xqhrs232 (10:14:27): 支持的协议更多点吧! 春tian在哪里 (10:14:38): 比如? xq ...

  6. XSD标准架构-----<xsd:element> 元素详解

    声明一个元素.     <element abstract = Boolean : false block = (#all | List of (extension | restriction ...

  7. git push origin master、git pull出现如下错误

    git push origin master出现如下错误: Counting objects: , done. Writing objects: % (/), bytes, done. Total ( ...

  8. VJP1071新年趣事之打牌(背包+输出路径)

    简单的01背包 保存下方案总数 其实就是dp[v]值 输出路径dfs一下 #include <iostream> #include<cstdio> #include<cs ...

  9. c程序设计语言_习题1-16_自己编写getline()函数,接收整行字符串,并完整输出

    Revise the main routine of the longest-line program so it will correctly print the length of arbitra ...

  10. Upgrading to EF6

    In previous versions of EF the code was split between core libraries (primarily System.Data.Entity.d ...