struts2 文件上传下载

1.实现 struts2 文件上传,下载 功能

     最近在做OA项目的过程中需要做一个信访登记里面需要用到一个文件上传下载的功能,  页面如下:


         

实现思路:

       当点击确定的时候,同时进行文件上传和保存当前的这条数据,文件上传到web项目的根指目录的指定文件夹,并且保证每次上传的文件名称是唯一。

      首先获得上传的文件类型,例如:上传一个名为1232131.txt的文本文件, 则获取.txt后缀名,然后随机生成一个流水号, 用流水号+文件的后缀 拼成一个新的文件名,这样就能保存文件名的唯一, 并且将文件全名存入数据库表中的某个字段,这样可以方便文件下载操作,





1.首先在action.xml 中需要配置如下几个参数


<action name="person" class="xfpersonAction"  >
<result name="success" type="stream">
<param name="contentType">application/octet-stream</param>
<param name="inputName">fileInputStream</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="bufferSize">102400000</param>
</result>                
</action>

在action中配置<result></result>节点 ,以及<param></param> 子节点,如下图:


文件上传关键代码 ,如图:

if (file != null) {
String root = ServletActionContext.getServletContext().getRealPath("/attachFiles");
InputStream is = new FileInputStream(file);
String ffHouZhui = fileFileName.substring(fileFileName.length() - fileFileName.lastIndexOf("."),
fileFileName.length());
System.out.println("后缀" + ffHouZhui);
// 组成一个新的文件名称
FilenewName = Getnum() + "." + ffHouZhui;
// 创建一个新的File
OutputStream os = new FileOutputStream(new File(root, FilenewName));


byte[] buffer = new byte[500];
int length = 0;
try {
while (-1 != (length = is.read(buffer, 0, buffer.length))) {
os.write(buffer);
}
os.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

   

 

  

  如上图, 前台 <input  type="file" name="file"> 文件控件定义的name=file,所以后台这边定义接收也应该叫file,如下图:





定义一个随机数,组成唯一文件名,随机数的方法如下,很简单




实现文件下载,如图:




这里定义的fileInputStream 名称要和

<param name="inputName">fileInputStream</param>中的fileInputStream名字一样才行,否则不行

下载的链接如下图:



action 的name 加上filename即可,



    


    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值