轉自http://blog.csdn.net/hudou_k/archive/2005/10/17/507960.aspx
1
package linkman.helper;
2
3
import java.io.*;
4
import java.util.*;
5
import javax.servlet.http.HttpServletRequest;
6
import javax.servlet.http.HttpServletResponse;
7
import javax.servlet.ServletInputStream;
8
9
public class UpLoadBean
{
10
private String SavePath = null;
11
private String FileName = null;
12
private String Sperator = null;
13
private String ErrMsg = "正常返回";
14
15
private byte[] bt = new byte[4096];
16
private byte[] prebt = new byte[4096];
17
private int t = -1;
18
private long FileSize = -1;
19
private boolean UserDefineFileName = false;
20
21
/////////////////////////////////////////////////
22
public UpLoadBean ()
{
23
FileName = bringFileName ();
24
}
25
public UpLoadBean (String savepath)
{
26
SavePath = savepath;
27
FileName = bringFileName ();
28
}
29
30
/////////////////////////////////////////////////
31
// 文件名信息
32
private String bringFileName ()
{
33
Calendar dt = Calendar.getInstance ();
34
String str = "" + dt.get (Calendar.YEAR) + dt.get (Calendar.MONTH) + dt.get (Calendar.DAY_OF_MONTH);
35
str = str + dt.get (Calendar.HOUR) + dt.get (Calendar.MINUTE) + dt.get (Calendar.SECOND);
36
return str;
37
}
38
39
public void setFileName (String filename)
{
40
FileName = filename;
41
UserDefineFileName = true;
42
}
43
public String getFileName ()
{
44
return FileName;
45
}
46
/////////////////////////////////////////////////
47
// 上傳文件主程序
48
public boolean UpLoad (HttpServletRequest request) throws Exception
{
49
if (SavePath == null)
{
50
setErrorMessage ("未設置保存上傳文件的路徑");
51
return false;
52
}
53
request.setCharacterEncoding("utf-8");
54
ServletInputStream in = request.getInputStream ();
55
////////////////////////////////////////////
56
// 獲取得一行的分隔標志
57
t = in.readLine (bt, 0, bt.length);
58
if (t != -1)
{
59
Sperator = new String (bt, 0, t);
60
Sperator = Sperator.substring (0, 28);
61
t = -1;
62
}
63
64
////////////////////////////////////////////
65
// 取擴展名并設定文件全名
66
do
{
67
t = in.readLine (bt, 0, bt.length);
68
String s = new String (bt, 0, t);
69
int index = s.indexOf ("filename=\"");
70
if (index != -1)
{
71
s = s.substring (index + 10);
72
index = s.indexOf ("\"");
73
s = s.substring (0, index);
74
index = s.lastIndexOf (".");
75
if (!UserDefineFileName)
{
76
FileName = FileName + s.substring (index); // 設定文件全名
77
}
78
t = -1;
79
}
80
} while (t != -1);
81
82
////////////////////////////////////////////
83
// 取文件內容
84
FileOutputStream out = new FileOutputStream (SavePath + "\\" + FileName);
85
86
t = in.readLine (bt, 0, bt.length);
87
String s = new String (bt, 0, t);
88
int i = s.indexOf ("Content-Type:");
89
if (i == -1)
{
90
setErrorMessage ("上傳的不是文件");
91
return false;
92
} else
{
93
in.readLine (bt, 0, bt.length); // 去掉一個空行
94
t = -1;
95
}
96
97
boolean state = true;
98
long trancsize = 0;
99
try
{
100
t = in.readLine (bt, 0, bt.length);
101
while (t != -1)
{
102
s = new String (bt, 0, t);
103
if (s.length () > 28)
{
104
s = s.substring (0, 28);
105
if (s.equals (Sperator))
{
106
break;
107
}
108
}
109
110
/**//*
111
if (bt[0] == 45 && bt[1] == 45 && bt[2] == 45 && bt[3] == 45 && bt[4] == 45) {
112
break;
113
}
114
*/
115
if (FileSize != -1)
{
116
if (trancsize >= FileSize)
{
117
throw new Exception ("上傳文件太大");
118
}
119
}
120
out.write (bt, 0, t);
121
trancsize += t;
122
t = in.readLine (bt, 0, bt.length);
123
}
124
} catch (Exception e)
{
125
state = false;
126
out.close ();
127
setErrorMessage (e.getMessage ());
128
File tmp = new File (SavePath, FileName);
129
if (!tmp.delete())
{
130
setErrorMessage (e.getMessage () + ",清除未完成");
131
}
132
} finally
{
133
if (state)
{
134
out.close ();
135
}
136
return state;
137
}
138
}
139
/////////////////////////////////////////////////
140
// 上傳文件錯誤信息
141
public void setErrorMessage (String errormessage)
{
142
ErrMsg = errormessage;
143
}
144
public String getErrorMessage ()
{
145
return ErrMsg;
146
}
147
/////////////////////////////////////////////////
148
// 文件大小信息
149
public void setFileSize (long size)
{
150
FileSize = size;
151
}
152
153
public long getFileSize ()
{
154
return FileSize;
155
}
156
}// end class
157
158

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



100

101



102

103



104

105



106

107

108

109

110


111

112

113

114

115



116



117

118

119

120

121

122

123

124



125

126

127

128

129



130

131

132



133



134

135

136

137

138

139

140

141



142

143

144



145

146

147

148

149



150

151

152

153



154

155

156

157

158
