///step3 import java.io.*; import java.text.SimpleDateFormat; import java.util.Calendar; import com.opensymphony.xwork.ActionSupport; public class UploadAgent extends ActionSupport { private File doc;// doc与页面取一样的名字 private String url;//记录跳转的url @Override public String execute() throws Exception { // TODO 自动生成方法存根 File myFilePath = new File("../webapps/QJCProject/materiallib");//设定文件要上传的目录,也可以通过jsp页面传 if (!myFilePath.exists()) { myFilePath.mkdir(); System.out.println("*******MaKe DIR!*********"); } String time = ""; try{ Calendar now=Calendar.getInstance(); SimpleDateFormat sdf=new SimpleDateFormat( "yyyyMMddHHmmss"); time = sdf.format(now.getTime()); }catch(Exception e){ e.printStackTrace(); } File myFile = new File(myFilePath,time+doc.getName()); try { java.io.FileInputStream fosfrom = new java.io.FileInputStream(doc); java.io.FileOutputStream fosto = new FileOutputStream(myFile); byte bt[] = new byte[1024]; int c; while ( (c = fosfrom.read(bt)) > 0) { fosto.write(bt, 0, c); } fosfrom.close(); fosto.close(); return "success"; } catch (Exception ex) { ex.printStackTrace(); return "error"; } } public void setDoc(File doc) { this.doc = doc; } public File getDoc() { return doc; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }///step2. xwork.xml ${url} ${url}
今天上午研究了一下文件上传,由于系统本身采用了webwork,所以决定就用webwork自带的上传功能吧。文章记录下一些必须的步骤。
//
step1. webwork.properties
增加一下内容
webwork.multipart.saveDir=../uploads
webwork.multipart.parser=com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest
第一个是指定webwork上传的临时目录,第二个是指定上传方式。webwork支持三种,这里采用的pell方式,另外两种没有尝试
//
step2. xwork.xml
增加一句<include file="com/upload/until/upload.xml"></include>
在upload.xml文件中
<interceptors></interceptors>之间是设定文件上传的拦截器
<action></action>之间是设定将要使用的action,在jsp文件中就可以以uploaddo作为action的名字了
//
step3. UploadAgent.java
这个文件就是处理上传文件的地方了。webwork是把文件上传到了一个临时文件夹里,就是在webwork.properties中所指定的。然后我们要做的就是把这个文件复制到你要保存的地方,同时我利用当前时间对上传的文件进行改名以防止文件名重复。在这个文件中还可以对数据库进行操作,方便对上传文件的维护
//
step4. upload.jsp
jsp文件中很简单,和平时一样写一个form,然后加上action
<form action="uploaddo.action" enctype="multipart/form-data" method="post">
<input type="file" name="doc"/>
<input type="submit" value="上传" />
</form>
//
至此,工作完成了,其实还是挺简单的啦,只不过具体怎么实现的还是不知道,哎~