文件下载

来源:互联网 发布:java判断字符串为空格 编辑:程序博客网 时间:2024/06/15 10:45

创建action

public class DownloadAction extends ActionSupport{

         privateFile[]files;

         publicString list(){

                   //取得文件保存路径

                   Stringpath=ServletActionContext.getServletContext().getRealPath("/upload");

                   File f=new File(path);

                   //获取目录下保存的文件

                   files=f.listFiles();

                   return"list";

         }

//省略get/set

}

配置struts.xml

<actionname="*down" class="base.MyFileUpload"method="{1}">

                                     <result name="list">/filelist.jsp</result>

                            </action>

创建fileslist.jsp

<body>

    <c:forEachitems="${files }"var="f">

             ${f.name}<br/>

    </c:forEach>

  </body>

修改action代码

public class DownloadAction extends ActionSupport{

         privateFile[]files;

         privateStringfileName;

         publicString list(){

                   //取得文件保存路径

                   Stringpath=ServletActionContext.getServletContext().getRealPath("/upload");

                   File f=new File(path);

                   //获取目录下保存的文件

                   files=f.listFiles();

                   return"list";

         }

         publicInputStream  getDownloadFile()throws Exception{

                   String filePath =ServletActionContext.getRequest()

                                     .getServletContext().getRealPath("/upload/"+fileName);

                   InputStream is = new FileInputStream(new File(filePath));

                   //解决下载文件名称问题

                   fileName=URLEncoder.encode(fileName,"UTF-8");

                   returnis;

         }

         publicvoid setFileName(String fileName)throws UnsupportedEncodingException {

                   //处理get请求中文乱码

                   this.fileName =newString(fileName.getBytes("iso8859-1"),"utf-8");

         }

         publicFile[] getFiles() {

                   returnfiles;

         }

         publicvoid setFiles(File[] files) {

                   this.files = files;

         }

         publicString getFileName() {

                   returnfileName;

         }       

}

修改struts.xml文件

<actionname="*down" class="base.DownloadAction"method="{1}">

                                     <result name="list">/filelist.jsp</result>

                                     <result type="stream">

                                               <!-- 下载的文件数据存放的方法,该方法返回一个InputStream

例如取值为inputStream的属性需要编写getInputStream()方法-->

                                               <param name="inputName">downloadFile</param>

                                               <!--下载时,客户端显示的下载的文件名 -->

                                               <param name="contentDisposition">

attachment;filename=${fileName}

</param>

                                               <!-- 数据的缓冲大小 -->

                                               <param name="bufferSize">1024</param>

                                     </result>

                            </action>