文档章节

SSH入门系列4:上传文件

O
 ORZ你好
发布于 2017/07/14 23:27
字数 797
阅读 5
收藏 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
博文 15
码字总数 8932
作品 0
南京
Docker入门与实战系列:深入

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

孤岛旭日
2015/11/07
0
0
最全的Windows Azure学习教程汇总

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

chenhao_asd
2017/02/26
0
0
最全的Windows Azure学习教程汇总

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

葡萄城控件技术团队
2016/11/08
35
0
Linux目录(Centos)

easy808
2017/12/01
0
0
Jenkins入门系列

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

harries
2016/04/21
218
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis常用命令

keys 我把这个命令放在第一位,是因为笔者曾经做过的项目,以及一些朋友的项目,都因为使用keys这个命令,导致出现性能毛刺。这个命令的时间复杂度是O(N),而且redis又是单线程执行,在执行k...

谢思华
29分钟前
2
0
关于css宽度分离

所谓宽度分离就是width 属性不与影响宽度的 padding/border(有时候包括 margin)属性共存 例如: .box{width:200px;padding:20px;border:1px solid;} 为何要做宽度分离 一说到分离就是为了好...

莫西摩西
40分钟前
1
0
Linux常用命令

###############常用命令说明############################## cat /proc/version 显示内核的版本 mv dir1 new_dir 重命名/移动 一个目录 rm -rf a.txt b.txt c.txt 删除多个文件 chmod 777 ......

lyle_luo
47分钟前
2
0
全国地区代码科普

全国地区代码表 天津市 地区代码 地区名称 1100 天津市 辽宁省 地区代码 地区名称 2210 沈阳市 2210 法库县 2210 康平县 2210 辽中县 2210 新民市 2220 大连市 2222 普兰店市 2223 庄河市 22...

恋码之子
47分钟前
1
0
DbForge Schema Compare for MySQL入门教程:生成比较报告

【dbForge Schema Compare for MySQL下载】 当架构比较完成后,您可以生成比较报告以保留架构更改的记录。 1. 在“Comparison” 菜单中,单击“Generate Comparison Report” 。将打开“Gen...

Miss_Hello_World
48分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部