6.struts1.x的上传与下载

  1. 文件上传

        <!-- form的配置,很简单,但是很必要,好像只能用动态表单。另外不定数量的文件上传并不太好解决 -->

        <form-bean name="photoForm"

            type="org.apache.struts.validator.DynaValidatorForm">

            <form-property name="photo1"

                type="org.apache.struts.upload.FormFile">

            </form-property>

            <form-property name="photo2"

                type="org.apache.struts.upload.FormFile">

            </form-property>

            <form-property name="photo3"

                type="org.apache.struts.upload.FormFile">

            </form-property>

        </form-bean>

------------------------------------------------------------------

        <!-- 跟普通的action的配置没有任何区别 -->

        <action path="/upload" type="edu.yzu.action.UploadAction"

            name="photoForm">

        <forward name="success" path="/ok.jsp"></forward>

    </action>

------------------------------------------------------------------------------

    <form action="<%=request.getContextPath() %>/upload.do" method="post" enctype="multipart/form-data">

   <input type="file" name="photo1">

   <input type="file" name="photo2">

   <input type="file" name="photo3">

   <input type="submit">

</form>

------------------------------------------------------------------

package edu.yzu.action;

import java.io.FileOutputStream;

import java.util.*;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.*;

import org.apache.struts.upload.FormFile;

import org.apache.struts.upload.MultipartRequestHandler;

public class UploadAction extends Action {

@SuppressWarnings("unchecked")

@Override

public ActionForward execute(ActionMapping mapping, ActionForm form,

        HttpServletRequest request, HttpServletResponse response)

        throws Exception {

    DynaActionForm daf=(DynaActionForm)form;

    MultipartRequestHandler handler=daf.getMultipartRequestHandler();

    Hashtable photos=handler.getFileElements();

    Set set=photos.keySet();

    System.out.println(set.size());

    Iterator values=set.iterator();

    while(values.hasNext())

    {

        FormFile file=(FormFile) photos.get(values.next());

        System.out.println(file.getFileName());

        FileOutputStream out=new FileOutputStream("c:\\"+file.getFileName());

        out.write(file.getFileData());

        out.close();

    }

    return mapping.findForward("success");

}

}

 

  1. 文件下载

文件下载功能是通过DownloadAction实现的。

继承DownloadAction。

实现getStreamInfo方法,返回StreamInfo对象。

部分代码的实现:

package edu.yzu.action;

import java.io.File;

import javax.servlet.http.*;

import org.apache.struts.action.*;

import org.apache.struts.actions.DownloadAction;

public class TestDownLoad extends DownloadAction{

    @Override

    /*

     * 这个类可以没有execute方法。因为通过链接下载文件成功成没有必要跳转,当然也可以

     * 做到,这时文件下载将会被抑制,就没有下载的意义了。

     * 它的配置与其它的action没有任何区别

     */

    protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) throws Exception {

        String fileName = "test.txt";

        response.setHeader("Content-disposition",

                                   "attachment; filename=" + fileName);       

        File file = new File(this.servlet.getServletContext().getRealPath("/upload")+"//"+fileName);  

        return new FileStreamInfo("text/html", file);

    }

   

}

posted @ 2010-05-03 16:45  沉兮  阅读(516)  评论(0编辑  收藏  举报