文档章节

SSH入门系列4:上传文件

O
 ORZ你好
发布于 2017/07/14 23:27
字数 797
阅读 4
收藏 0
点赞 0
评论 0

Struts2上传文件依赖于Struts2所自带的两个包(commons-fileupload-1.2.2.lib和commons-io-2.0.1.lib),并通过拦截器来实现,拦截器则被定义到默认拦截器,所以无需自己在手工配置。

此外,其默认大小是在 default.properties文件的struts.multipart.maxSize=2097152,也就是2M大小。如果想要修改,有两种方式

  第一种方式需要在src目录下,新建一个struts.properties文件,指定上传大小。如果想上传为10M,则改为:struts.multipart.maxSize=10487560 (1024*1024*10)。

 第二种方式在struts.xml进行指定

<constant  name="struts.multipart.maxSize"  value="10497560">   </constant>

注意:上传方式一次只能上传10M,哪怕多个文件并在一起,也是只有最大10M。

         如果struts.properties  和struts.xml同时设置了,那么以struts.properties为主(优先级较高)。

具体实现步骤:

1)创建一个jsp页面,jsp页面有文件上传的表单对象 。

<form action="myuser/User_shangchuan!shangchuan"   method="post"  type="multipart/form-data">

文件:<input type="file" name="file" />

<input type="submit "  value="提交" />

</form>
 

注意: 

1:表单对象的提交方式为post ,同时需要设置属性 enctype="multipart/form-data"

2:文件上传的表单名要对应action里面的属性

<input type="file" name="file"/>,即action里面必须有一个 File类型的  名称为file的数据。

2)开发action,添加如下2个属性:

必须具备如下几个属性:

private File file ; //与上文的 name = "file"想对应

private  String fileFileName;   

//这里的fileFileName ,不能随意变动,如果上面为file1,下面则改为file1FileName,下面的fileContentType也是同理。

private  String fileContentType  

具体代码如下(代码相对固定):

//上传功能的本质上是选择一个文件,然后逐步读取,并在服务器文件夹内,将读取的文件内容重新写出来。所以实际上只需要OutputStream(os 输出流,用来在服务器写入文件,需要制定路径和文件名) ,InputStream (is 输入流,用来读取上传的文件)  

Action内容设置如下:

private String fileFileName;

private file file;

private String fileContentType;

get ,set方法。。。。

  public String shangchuan(){

//获取文件的存储路径,这里realPath是虚拟目录,然后在虚拟目录下新建一个upload文件夹,用来存放上传的数据,如果改成getContextPath()则输出/weblianxi(项目名称)

   String path = ServletActionContext.getRequest.getRealPath("/upload");

 OutputStream  os = new FileOutputStream(new File(path,fileFileName));

InputStream is = new FileInputStream(file);

byte[] b =new byte[1024];

int length=0;

//这里要抛出异常,其次,读完后输出-1

while(-1!=(length = is.read(b))){

os.write(b,0,length);

}

is.cloase();

os.close();

return "success";

}

多文件上传和单文件上传类似,jsp页面如下设置:

<form  action="myuser/User_shangchuan2!shangchuan2"  method="post"  enctype="multipart/form-data">
注意这里file文件名必须是一样的,在demo中同取了file1
文件1:<input type="file"  name="file1"/>
文件2:<input type="file"   name="file1"/>
<input type="submit" value="提交" />

 

在action页面,将数据存入list里面,具体代码如下:

    private List<String> file1FileName;
    private List<File> file1;
    private List<String> file1ContentType;
    get set方法。。。

//利用file1.size依次读取

public String shangchuan2() throws Exception{
    String path = ServletActionContext.getRequest().getRealPath("/upload");
    for (int i = 0; i < file1.size(); i++) {
        OutputStream  os  = new FileOutputStream(new File(path,file1FileName.get(i)));
        InputStream  is = new FileInputStream(file1.get(i));
        byte[]  b = new byte[1024];
        int length= 0;
        while (-1!=(length=is.read(b))) {
            os.write(b, 0, length);
            
        }
        is.close();
        os.close();
        
    }

    return"success";
}

 

© 著作权归作者所有

共有 人打赏支持
O
粉丝 0
博文 12
码字总数 8932
作品 0
南京
Docker入门与实战系列:深入

Docker入门与实战——《Docker ABC》电子书 https://github.com/gudaoxuri/DockerABC 8. 高级 本节我介绍如何自己构建一个Docker镜像,我们将构建一个支持scala的运行( http://www.scala-l...

孤岛旭日 ⋅ 2015/11/07 ⋅ 0

最全的Windows Azure学习教程汇总

转载: http://blog.csdn.net/powertoolsteam/article/details/53082470 目录(?)[-] 一 Windows Azure 平台简介 二Windows Azure入门教学系列 三Azure学习笔记 四Azure Storage 基本用法介绍......

chenhao_asd ⋅ 2017/02/26 ⋅ 0

最全的Windows Azure学习教程汇总

Windows Azure 是微软基于云计算的操作系统,能够为开发者提供一个平台,帮助开发可运行在云服务器、数据中心、Web 和 PC 上的应用程序。 Azure 是一种灵活和支持互操作的平台,能够将处于云...

葡萄城控件技术团队 ⋅ 2016/11/08 ⋅ 0

Linux目录(Centos)

easy808 ⋅ 2017/12/01 ⋅ 0

Jenkins入门系列

Jenkins 是一个可扩展的持续集成引擎。 主要用于: l 持续、自动地构建/测试软件项目。 l 监控一些定时执行的任务。 Jenkins拥有的特性包括: l 易于安装-只要把jenkins.war部署到servlet容器...

外星人et59 ⋅ 2016/04/21 ⋅ 0

Jenkins入门系列

enkins 是一个可扩展的持续集成引擎。 主要用于: l 持续、自动地构建/测试软件项目。 l 监控一些定时执行的任务。 Jenkins拥有的特性包括: l 易于安装-只要把jenkins.war部署到servlet容器...

harries ⋅ 2016/04/21 ⋅ 0

Git简单入门教程

安装git, 官网下载git并安装, 具体步骤略过. 2. 设置name和email 3. 生成sshkey, 并上传到你的git服务器上 ( 上传过程略 ) 如果一切顺利的话,可以在用户主目录里找到目录,里面有和两个文件...

古世界 ⋅ 2015/08/11 ⋅ 0

使用GitHub进行版本管理

在程序开发过程中,难免对代码进行无数次的修改。对于刚入门的程序员来说,版本控制是个什么东西,可能他们并不是十分清楚。 简单来说,版本控制就是能够在你每一次对代码进行修改时,帮你保...

jam_ ⋅ 2012/06/22 ⋅ 0

MongoDB系列教程(八):GridFS存储详解

MongoDB系列教程(八):GridFS存储详解 GridFS简介 mongoDB的文档以BSON格式存储,支持二进制的数据类型,当我们把二进制格式的数据直接保存到mongoDB的文档中。但是当文件太大时,例如图片...

开元中国2015 ⋅ 2015/07/25 ⋅ 0

MAC上Git安装与GitHub基本使用(一)

屏幕快照 2018-01-06 下午4.16.20.png 目录 安装git 创建ssh key、配置git 提交、上传 一、安装Git MAC 上安装Git主要有两种方式 1、通过homebrew安装Git 1、安装homebrew 2、安装git 2、通过...

FJ_WB ⋅ 01/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

懒惰根本就不存在

简评:芝加哥大学心理学教授,懒惰根本就不存在。(本文表面讲行为心理学实则讲教育) 金句:以好奇而不是判断来回应一个人的无效行为,是非常有帮助的。 本文「我」代表原作者 E Price。 自...

极光推送 ⋅ 25分钟前 ⋅ 0

Excel提取单元格中最后一个“.”后面的数据

java.lang.String ----- String =TRIM((MID(SUBSTITUTE(B2,".",REPT(" ",99)),(LEN(B2)-LEN(SUBSTITUTE(B2,".","")))*99,99)))...

klog ⋅ 27分钟前 ⋅ 0

mac远程桌面

下载安装remote-desktop-mac Mac beta 客户端 mac通过远程桌面访问windows服务器。

亚林瓜子 ⋅ 32分钟前 ⋅ 0

firrtl

动手---sbt(2)之后,再回头看 chisel第一个实验,根据 https://github.com/freechipsproject/firrtl 发现firrtl没有执行sbt assembly命令,重新执行这个命令,结果成功。如下图: joe@joe-As...

whoisliang ⋅ 36分钟前 ⋅ 0

NIO

一、通道(Channel):用于源节点与目标节点的连接。在 Java NIO 中负责缓冲区中数据的传输。Channel 本身不存储数据,因此需要配合缓冲区进行传输。 二、通道的主要实现类 java.nio.channel...

stars永恒 ⋅ 36分钟前 ⋅ 0

Android悬浮窗的实现

0. 前言   现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示。这个功能在很多情况下都非常有用。那么今天我们就来实现一下Android悬浮窗,以...

猴亮屏 ⋅ 37分钟前 ⋅ 0

日志采集中的关键技术分析

概述 日志从最初面向人类演变到现在的面向机器发生了巨大的变化。最初的日志主要的消费者是软件工程师,他们通过读取日志来排查问题,如今,大量机器日夜处理日志数据以生成可读性的报告以此...

tqyin ⋅ 38分钟前 ⋅ 0

使用Navicat将数据导出为text文本 然后再导入

将数据导出为text文本效率很高 1. 准备工作 1.1 准备表结构 1.2 目标库 执行生成表结构sql 2.将表数据导出为text文本 生成的text文本 3. 目标库 导入text 4.效果...

Lucky_Me ⋅ 44分钟前 ⋅ 0

IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)

文章介绍了idea下,项目乱码、控制台乱码及运行tomcat控制台乱码的解决方案,文章链接:https://www.cnblogs.com/vhua/p/idea_1.html

Funcy1122 ⋅ 47分钟前 ⋅ 0

IDEA使用sonarLint

一、IDEA如何安装SonarLint插件 1.打开 Idea 2.点击【File】 3.点击【Settings】 4.点击【Plugins】 5.在搜索栏中输入“sonarlint”关键字 6.点击【Install】进行安装 7.重启Idea 二、IDEA如...

开源中国成都区源花 ⋅ 51分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部