dorado技术园地

与您共同讨论dorado技术及其应用技巧

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  8 随笔 :: 0 文章 :: 37 评论 :: 1 Trackbacks
本文介绍了如何利用dorado提供的FileController实现文件的上传及下载. FileController是dorado mapping中的一个抽象类. 通过对FileController的继承, 我们可以很容易的实现一组文件的上传及下载的功能.

1. 在dorado studio的Mapping中新建一个Controller. 例如:
<controller name="file" clazz="sample.file.SampleController">
    
<action name="upload">
        
<forward name="success" path="/file/upload-success.jsp" contextRelative="false" />
        
<exception clazz="java.lang.Exception" path="/file/upload-failure.jsp" />
    
</action>
</controller>

2. 为该Controller新建一个Java实现类. 注意在新建Java类的向导中不必勾选任何待重载的父类方法.

3. 完成上述步骤后. 首先将实现类的父类改为FileController. 然后根据需要重载部分父类中的方法. 可以参考下面的例子:
 1package sample.file;
 2

 3
import java.io.File;
 4
import java.io.FileInputStream;
 5
import java.io.InputStream;
 6
import javax.servlet.http.HttpServletRequest;
 7

 8
import org.apache.commons.fileupload.DiskFileUpload;
 9
import org.apache.commons.fileupload.FileItem;
10
import com.bstek.dorado.biz.FileController;
11import com.bstek.dorado.utils.*
;
12

13
/**
14
 * SampleController
15 */

16public class SampleController
17    extends FileController 
{
18  private final String WORK_DIR = "d:/temp"
;
19

20  
/**
21
   * 设定 DiskFileUpload 的相关属性.
22
   * <p>关于DiskFileUpload, 你可以到www.apache.org/commons查找FileUpload的文档</p>
23
   *
24
   * @param request HttpServletRequest
25
   * @param fileUpload DiskFileUpload
26
   * @param parameters MetaData
27   */

28  protected void initFileUpload(HttpServletRequest request,
29                                DiskFileUpload fileUpload, MetaData parameters) 
{
30    fileUpload.setSizeMax(1024 * 512); // 512K

31  }

32
33  
/**
34
   * 取得存放上传文件的目标目录
35
   *
36
   * @param request HttpServletRequest
37
   * @param parameters MetaData
38
   * @return String
39   */

40  protected String getUploadWorkDir(HttpServletRequest request,
41                                    MetaData parameters) 
{
42    return
 WORK_DIR;
43  }

44
45  
/**
46
   * 取得存储上传文件的文件名
47
   *
48
   * @param request HttpServletRequest
49
   * @param fileName String
50
   * @param parameters MetaData
51
   * @return String
52   */

53  protected String getStoreFileName(HttpServletRequest request, String fileName,
54                                    MetaData parameters) 
{
55    return
 fileName;
56  }

57
58  
/**
59
   * 存储已经上传的文件
60
   *
61
   * @param request HttpServletRequest
62
   * @param fileItem String
63
   * @param storeFile String
64
   * @param parameters MetaData
65
   * @throws Exception
66   */

67  protected void storeUploadFile(HttpServletRequest request, FileItem fileItem,
68
                                 File storeFile, MetaData parameters)
69      throws Exception 
{
70
    super.storeUploadFile(request, fileItem, storeFile, parameters);
71

72    /** @todo 在这里您可以添加自己的代码记录上传文件信息 */

73  }

74
75  
/**
76
   * 取得将要下载的文件的文件名
77
   *
78
   * @param request HttpServletRequest
79
   * @return String
80   */

81  protected String getDownLoadFileName(HttpServletRequest request) {
82    return request.getParameter("fileName"
);
83  }

84
85  
/**
86
   * 取得将要被下载的文件的文件输入流
87
   *
88
   * @param request HttpServletRequest
89
   * @return InputStream
90
   * @throws Exception
91   */

92  protected InputStream getDownloadFileInputStream(HttpServletRequest request)
93      throws Exception 
{
94    return new FileInputStream(WORK_DIR + File.separator +

95                               request.getParameter("fileName"));
96  }

97
98}

99

4. 添加一个jsp用来上传文件. 例如:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page errorPage="/dorado/exception.d" %>
<%@ taglib uri="http://www.bstek.com/dorado" prefix="d" %>
<html>
<head>
<title>文件上传</title>
</head>
<body>
  
<center>    
    
<form method="post" target="upload" enctype="multipart/form-data"

      action
="<%=request.getContextPath()%>/file.upload.d">
      
<input type="file" name="file1" size="40">
      
<br>
      
<input type="file" name="file2" size="40">
      
<br>
      
<input type="file" name="file3" size="40">
      
<hr>
      
<input type="submit" value=" 上传 ">
    
</form>
  
</center>
</body>
</html>

5. 如果要下载Server端的文件只要使用通过url访问我们新定义的FileController就可以了. 例如:
http://localhost:8080/xxxx/file.download.d?filename=文件名
posted on 2005-07-14 23:27 dorado技术园地 阅读(5866) 评论(1)  编辑  收藏

评论

# re: 利用dorado mapping快速开发文件的上传和下载 2007-01-16 13:48 xiebo
类应该要是abstract的吧。不然无法继承。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: