本文介紹了如何利用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. 然后根據需要重載部分父類中的方法. 可以參考下面的例子:
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=文件名
1. 在dorado studio的Mapping中新建一個Controller. 例如:






2. 為該Controller新建一個Java實現類. 注意在新建Java類的向導中不必勾選任何待重載的父類方法.
3. 完成上述步驟后. 首先將實現類的父類改為FileController. 然后根據需要重載部分父類中的方法. 可以參考下面的例子:
1
package 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;
11
import com.bstek.dorado.utils.*;
12
13
/**//**
14
* SampleController
15
*/
16
public 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

2

3

4

5

6

7

8

9

10

11

12

13


14

15

16

17



18

19

20


21

22

23

24

25

26

27

28

29



30

31

32

33


34

35

36

37

38

39

40

41



42

43

44

45


46

47

48

49

50

51

52

53

54



55

56

57

58


59

60

61

62

63

64

65

66

67

68

69



70

71

72


73

74

75


76

77

78

79

80

81



82

83

84

85


86

87

88

89

90

91

92

93



94

95

96

97

98

99

4. 添加一個jsp用來上傳文件. 例如:





























5. 如果要下載Server端的文件只要使用通過url訪問我們新定義的FileController就可以了. 例如:
http://localhost:8080/xxxx/file.download.d?filename=文件名