文档章节

SSH入门系列4:上传文件

O
 ORZ你好
发布于 2017/07/14 23:27
字数 797
阅读 6
收藏 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入门系列

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

外星人et59
2016/04/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

网站老被劫持快照跳转怎么办

最近很多公司的网站被劫持跳转到了bo彩、cai票网站上去,客户从百度点击进去会跳转,直接输入网站的域名不会跳转,网站快照也被劫持成bo彩的内容,site查看网站在百度的收录也出现问题,收录...

网站安全
12分钟前
1
0
给自己灌鸡汤

前言 看极客时间的《数据结构与算法之美》,中间有一篇文章是在说怎么坚持学习的,摘抄一些片段过来,激励自己。 https://time.geekbang.org/column/article/69607 致使你掉队的原因 一个人在...

grace_233
14分钟前
1
0
如何在网络视听行业建一扇内容安全大门?

在人工智能飞速发展的三年里,整个网络视听产业数字化发展速度非常迅猛。大数据作为如今这个时代的产物,正不断推动整个产业的发展。网络视听行业中存在海量的数据,比如视频内容、视频浏览量...

阿里云官方博客
24分钟前
1
0
云安全简史

课程介绍: DT时代我们每个人的生活在不知不觉中与云计算发生了千丝万缕的联系,起床、吃饭、出行、社交、工作、娱乐、购物等大多数应用都在云上,然而安全事件频发时刻在为我们敲响警钟,面对...

mcy0425
25分钟前
2
0
数字IT基础-数据采集总线

摘要: 日志服务是阿里自产自用的产品,在双十一、双十二和新春红包期间承载阿里云/蚂蚁全站、阿里电商板块、云上几千商家数据链路,每日处理来自百万节点几十PB数据,峰值流量达到每秒百GB,...

阿里云云栖社区
29分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部