2008年10月27日星期一

一步一步了解如何使用struts1.3上传文件

今天下午休息,时间富裕很多,有空静下心来写点东西.这也是本博客第一篇技术类的文章.呵呵,我为什么要写这个题目呢?因为有学员强烈要求这方面的内容,正好明天要讲,那么今天这篇文章就算他们明天课后可以参考的笔记吧.


struts1.3相信大家都不陌生了,虽然已经出来许久了,但是因为它简单,用的人比较多,所以生命力依旧非常顽强,最重要的是它能完成你大部分的需求,而且用它来开发web应用确实可以获得很好的体验,所以,讨论它还是十分必要的.我这篇文章针对群体是我的学生,所以,难免写的罗嗦,大牛们可以闪开休息.



需要的基础:struts课程(2年)


首先,你需要有一个struts1.3的工程.我们在struts的配置文件struts-config.xml里新建三合一(我在班里说的俗语),看下面:


那么,接下来我们来设置一下ActionForm:



也许图片有点小,但请注意,我这里设置了一个file属性,用来保存文件的,那么我们要选择jsp input type下拉框中的file.

接下来,我们切换到jsp选项卡上,选择create JSP form,用来创建jsp页面.然后一路next下去直到完成.

当这一切操作都完成后,我们首先来看一下我们生成的jsp页面,注意,为了上传文件,我们需要这样改写:<html:form action="/你的action地址" enctype="multipart/form-data">

好了,接下来,我们再看看生成的ActionForm的源代码...我们发现,这里我们设置为文件类型的属性file,依然还是String类型的.这是不行的,我们需要改写它的类型,把它改写成为FormFile类型的,这个FormFile类需要导入org.apache.struts.upload.FormFile,希望视力不好的同学仔细些.

完成这部分的操作后,基本上接下来我们就要考虑如何来处理这个上传的文件了.我们首先要决定要把它放在哪里,然后还要考虑你是否要限制它的大小,因为你的硬盘不是无限大的.


为了简单起见,我这里在这里仅做个示范,我就直接在Action里面写文件处理了,通过这个过程,你可以学习到struts1.3专门为我们准备的用于上传的文件表单类的一些实用方法.以下是在Action的execute方法内的代码:



//这就是我们的ActionForm
MyUpForm myUpForm = (MyUpForm) form;
//获得struts文件类(这是我们ActionForm的一个属性)
FormFile file=myUpForm.getFile();
//获得上传的文件名
String filename=file.getFileName();
//获取输入流(因为我们要使用byte数组来保存文件数据,好写回到硬盘上,所以这里要先获取输入流把数据保存到byte数组里,这个输入流中已经保存有上传文件的数据了.)
InputStream inputStream=file.getInputStream();
//我们新建一个byte数组,数组的长度为文件的大小.新建它的目的就是为了保存上传文件的数据.
byte[] imageData=new byte[file.getFileSize()];
//我们把输入流中的上传文件数据保存到我们的byte数组中
inputStream.read(imageData);
//注意,操作完输入流需要关闭.
inputStream.close();
//为了写回到硬盘上,需要新建一个输出流
FileOutputStream outputStream=new FileOutputStream(new File("你要保存的具体位置"+filename));
//我们根据已经保存上传文件数据的byte数组写回你保存的具体位置上.
outputStream.write(imageData);
//最后,操作完输出流,一样要进行关闭操作.
outputStream.close();
//好了,你现在就可以去看看文件是否上传成功了,是不是很简单呢?简简单单就把上传文件给搞定了.很好玩吧.


希望看我这篇文章的同学能认认真真的回去自己试着做一次,有什么问题再问我,最后罗嗦一句,设置好编码格式,才能避免中文的文件上传后变成乱码.










7 条评论:

  1. 我谨以个人名义感谢杨老师的奉献精神。
    我在此祝杨老师天天快乐!!!!!



    欢迎杨老师光临敝公司网站www.megmeg.meg

    回复删除
  2. 20、驴的哲学

    人生必须渡过逆流才能走向更高的层次,最重要的是永远看得起自己。

    有一天某个农夫的一头驴子,不小心掉进一口枯井里,农夫绞尽脑汁想办法救出驴子,但几个小时过去了,驴子还在井里痛苦地哀嚎着。最后,这位农夫决定放弃,他想这头驴子年纪大了,不值得大费周章去把它救出来,不过无论如何,这口井还是得填起来。于是农夫便请来左邻右舍帮忙一起将井中的驴子埋了,以免除它的痛苦。农夫的邻居们人手一把铲子,开始将泥土铲进枯井中。当这头驴子了解到自己的处境时,刚开始哭得很凄惨。但出人意料的是,一会儿之后这头驴子就安静下来了。农夫好奇地探头往井底一看,出现在眼前的景象令他大吃一惊:当铲进井里的泥土落在驴子的背部时,驴子的反应令人称奇──它将泥土抖落在一旁,然后站到铲进的泥土堆上面!

    就这样,驴子将大家铲倒在它身上的泥土全数抖落在井底,然后再站上去。很快地,这只驴子便得意地上升到井口,然后在众人惊讶的表情中快步地跑开了!

    温馨提示:就如驴子的情况,在生命的旅程中,有时候我们难免会陷入“枯井”里,会被各式各样的“泥沙”倾倒在我们身上,而想要从这些“枯井”脱困的秘诀就是:将“泥沙”抖落掉,然后站到上面去!

    回复删除
  3. 太感动了 ~~~~! 从来没见过这么好的帖子 看的我都哭了

    回复删除
  4. 步骤太详细了 ,正是我需要的。杨老师,有时间能把动态验证框架页发表上来吗??

    回复删除
  5. null,none;
    nothing,
    without

    回复删除
  6. 老师我想知道我们明天讲什么

    一直没有下定决心开这个blog.很早以前就想开了,只是一直懒.想表达的太多,但留下的却几乎没有.所以,从今天开始,我要把想说的,想做的,想分享的,统统留在我的心底.虽然时间和精力有限,但我也会坚持下去.

    回复删除