JAVA Web 之 struts2文件上传下载演示(一)(转)

时间:2022-09-11 08:00:13

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,当然附件里面也有

JAVA Web 之 struts2文件上传下载演示(一)(转)

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>效果图如下

选择文件,然后点击【确认上传】

JAVA Web 之 struts2文件上传下载演示(一)(转)

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

JAVA Web 之 struts2文件上传下载演示(一)(转)

然后就可以在 eclipse工作空间\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\UpDownDemo\file下面找到刚刚上传的文件了。

打开文件,发现两个记事本中的内容一样(在java代码中我有解释为啥会把文件重命名)

JAVA Web 之 struts2文件上传下载演示(一)(转)

 

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

  1. JAVA Web 之 struts2文件上传下载演示&lpar;二&rpar;&lpar;转&rpar;

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

  2. Struts2文件上传下载

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

  3. Java Web&lpar;十二&rpar; 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&period;Net Web服务器的文件上传下载BUG汇总&lbrack;更新&rsqb;

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

  7. Struts2之文件上传下载

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

  8. java web 文件上传下载

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

  9. Struts2文件上传和下载&lpar;原理&rpar;

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

随机推荐

  1. System&period;Diagnostics&period;Process&period;Start的妙用

    我们经常会遇到在Winform或是WPF中点击链接或按钮打开某个指定的网址, 或者是需要打开电脑中某个指定的硬盘分区及文件夹, 甚至是"控制面板"相关的东西, 那么如何做呢? 答案 ...

  2. javascript创建跟随鼠标好玩的东西

    不说话,直接上代码. css: #createGoDivBox{ display: none; } #createGoDivBox div{ background-color: #00A6C2; po ...

  3. NIO概述

    NIO API从Java1.4开始引用起就被广泛应用所使用.NIO API自带了IO非阻塞操作. java.nio.*包的结构: · Buffers 作为数据容器 · Chartsets 将容器中的数 ...

  4. 【转】java&period;util&period;ResourceBundle使用详解

    原文链接:http://lavasoft.blog.51cto.com/62575/184605/ 人家写的太好了,条理清晰,表达准确.   一.认识国际化资源文件   这个类提供软件国际化的捷径.通 ...

  5. 安装SQL Server 2012 『企业中文版』

    安装 SQL Server 前,请详细参阅:计划安装SQL Server2012需求详细http://www.cnblogs.com/chhuang/p/3623198.html 安装 SQL Ser ...

  6. MyEclipse10中导入的jquery文件报错(出现红叉叉,提示语法错误)

    为了做一个页面特效,导入了一个jQuery文件,怎想,myeclipse竟然报错说是语法错误,但是这个js文件我是从官网上下载的,不应该出错才对,百度谷歌之后终于找到了解决办法: 选中报错的js文件, ...

  7. PostgreSQL的initdb 源代码分析之五

    接前面,继续分析: putenv("TZ=GMT") 设置了时区信息. find_other_exec(argv[0], "postgres", PG_BACK ...

  8. Android进阶笔记02:Android 网络请求库的比较及实战&lpar;二&rpar;

    一.Volley        既然在android2.2之后不建议使用HttpClient,那么有没有一个库是android2.2及以下版本使用HttpClient,而android2.3及以上版本 ...

  9. 使用Gulp实现前端构建自动化

    使用Gulp实现前端构建自动化 安装 一.安装NodeJs Gulp的安装依赖于NodeJs的npm安装管理器 安装包下载地址 关于npm命令: 1. npm install <name> ...

  10. Golang安装与命令

    1. 安装 Windows -  https://golang.org/dl/ 下载msi安装包,点击安装即可.安装后cmd运行go version弹出版本号即安装成功. 2. 命令行 生成exe文件 ...