首先是Android端的上传工具类:
/**
* 本类可以完成一个或多个文件的提交。 结构非常简单直接看代码就可以了。
*
* @author janken
*/
public class FileUpload {
/**
* 提交文件的地址.
*/
private String url = null;
/**
* 要提交的文件.
*/
private List files = null;
/**
* 构造方法。
*
* @param url
* 这个URL必须是get提交方式的URL,即这个URL不能带有任何参数信息。eg:'http://localhost:8080/FileUploadServer/file/upload.do'
*/
public FileUpload(String url) {
this.url = url;
files = new ArrayList();
}
/**
* 通过这个方法来添加要提交的文件。
*
*
* @param file
* 提交的文件,如果文件为空或者不存在或者不可读,则不提交这个文件,重复的文件只提交一次。
*/
public void addFile(File file) {
if (file == null || !file.exists() || !file.canRead()) {
return;
} else {
for (int i = 0; i < files.size(); i++) {
if (file.getPath().equalsIgnoreCase(files.get(i).getPath())) {
return;
}
}
files.add(file);
}
}
/**
* 提交的方法,该方法为每个文件创建一个请求连接进行提交。
*
* @throws Exception
*/
public void upload() throws Exception {
for (int i = 0; i < files.size(); i++) {
HttpClient httpClient = new DefaultHttpClient();
try {
FileEntity entity = new FileEntity(files.get(i),
"binary/octet-stream");
StringBuilder curUrl = new StringBuilder(url);
curUrl.append("?fileName=" + files.get(i).getName());
HttpPost httppost = new HttpPost(curUrl.toString());
httppost.setEntity(entity);
HttpResponse response = httpClient.execute(httppost);
int resultCode = response.getStatusLine().getStatusCode();
if (resultCode != HttpStatus.SC_OK) {
throw new Exception("上传文件" + files.get(i).getPath()
+ "失败.错误代码是:" + resultCode + ";原因描述是:"
+ response.getStatusLine().getReasonPhrase());
}
} finally {
if (httpClient != null
&& httpClient.getConnectionManager() != null) {
httpClient.getConnectionManager().shutdown();
}
}
}
}
}
下面是Struts2的代码,框架的搭建这里就不再细述了,只说下struts.xml中的action的配置:
method="uploadFile">
video/3gpp,video/x-msvideo,application/x-MS-bmp,image/jpeg,video/mp4,audio/x-wav
100000000
/upload
result
action的name属性是请求时.do前边的内容,本例中请求时要用upload.do;后边的do是可以在web中配置的的,有的人用.action等的字符串。
package的namespace属性是请求时在url中指定请求的路径使用,本例中用的是file,……/FileUploadServer/file/upload.do(即斜粗体的部分)。
action的代码如下:
public class UploadFileAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String result = null;
private String fileName = null;
private String savePath = null;
public String getResult() {
return result;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public String uploadFile() throws Exception {
ActionContext context = ActionContext.getContext();
HttpServletRequest request = (HttpServletRequest) context
.get(ServletActionContext.HTTP_REQUEST);
CoyoteInputStream cis = (CoyoteInputStream) request.getInputStream();
String realPath = ServletActionContext.getServletContext().getRealPath(
savePath);
File dir = new File(realPath);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, fileName);
file.deleteOnExit();
file.createNewFile();
BufferedInputStream inBuff = null;
FileOutputStream output = null;
BufferedOutputStream outBuff = null;
try {
inBuff = new BufferedInputStream(cis);
output = new FileOutputStream(file);
outBuff = new BufferedOutputStream(output);
// 缓冲数组
byte[] b = new byte[1024 * 8];
int len;
while ((len = inBuff.read(b)) != -1) {
outBuff.write(b, 0, len);
}
outBuff.flush();
result = "OK";
return SUCCESS;
} finally {
if (inBuff != null) {
inBuff.close();
}
if (output != null) {
output.close();
}
if (outBuff != null) {
outBuff.close();
}
}
}
}
其中有3个属性,fileName是通过url传递过来的;result是用于请求的返回的告诉请求端处理是否完成;savePath是在action的xml中配置的一个参数,用来指定文件保存的文件夹
附录 :allowedTypes的类型对照如下:
application/octet-stream(无限制)
其他:
3gp
video/3gpp
aab
application/x-authoware-bin
aam
application/x-authoware-map
aas
application/x-authoware-seg
ai
application/postscript
aif
audio/x-aiff
aifc
audio/x-aiff
aiff
audio/x-aiff
als
audio/X-Alpha5
amc
application/x-mpeg
ani
application/octet-stream
asc
text/plain
asd
application/astound
asf
video/x-ms-asf
asn
application/astound
asp
application/x-asap
asx
video/x-ms-asf
au
audio/basic
avb
application/octet-stream
avi
video/x-msvideo
awb
audio/amr-wb
bcpio
application/x-bcpio
bin
application/octet-stream
bld
application/bld
bld2
application/bld2
bmp
application/x-MS-bmp
bpk
application/octet-stream
bz2
application/x-bzip2
cal
image/x-cals
ccn
application/x-cnc
cco
application/x-cocoa
cdf
application/x-netcdf
cgi
magnus-internal/cgi
chat
application/x-chat
class
application/octet-stream
clp
application/x-msclip
cmx
application/x-cmx
co
application/x-cult3d-object
cod
image/cis-cod
cpio
application/x-cpio
cpt
application/mac-compactpro
crd
application/x-mscardfile
csh
application/x-csh
csm
chemical/x-csml
csml
chemical/x-csml
css
text/css
cur
application/octet-stream
dcm
x-lml/x-evm
dcr
application/x-director
dcx
image/x-dcx
dhtml
text/html
dir
application/x-director
dll
application/octet-stream
dmg
application/octet-stream
dms
application/octet-stream
doc
application/msword
dot
application/x-dot
dvi
application/x-dvi
dwf
drawing/x-dwf
dwg
application/x-autocad
dxf
application/x-autocad
dxr
application/x-director
ebk
application/x-expandedbook
emb
chemical/x-embl-dl-nucleotide
embl
chemical/x-embl-dl-nucleotide
eps
application/postscript
eri
image/x-eri
es
audio/echospeech
esl
audio/echospeech
etc
application/x-earthtime
etx
text/x-setext
evm
x-lml/x-evm
evy
application/x-envoy
exe
application/octet-stream
fh4
image/x-freehand
fh5
image/x-freehand
fhc
image/x-freehand
fif
image/fif
fm
application/x-maker
fpx
image/x-fpx
fvi
video/isivideo
gau
chemical/x-gaussian-input
gca
application/x-gca-compressed
gdb
x-lml/x-gdb
gif
image/gif
gps
application/x-gps
gtar
application/x-gtar
gz
application/x-gzip
hdf
application/x-hdf
hdm
text/x-hdml
hdml
text/x-hdml
hlp
application/winhlp
hqx
application/mac-binhex40
htm
text/html
html
text/html
hts
text/html
ice
x-conference/x-cooltalk
ico
application/octet-stream
ief
image/ief
ifm
image/gif
ifs
image/ifs
imy
audio/melody
ins
application/x-NET-Install
ips
application/x-ipscript
ipx
application/x-ipix
it
audio/x-mod
itz
audio/x-mod
ivr
i-world/i-vrml
j2k
image/j2k
jad
text/vnd.sun.j2me.app-descriptor
jam
application/x-jam
jar
application/java-archive
jnlp
application/x-java-jnlp-file
jpe
image/jpeg
jpeg
image/jpeg
jpg
image/jpeg
jpz
image/jpeg
js
application/x-javascript
jwc
application/jwc
kjx
application/x-kjx
lak
x-lml/x-lak
latex
application/x-latex
lcc
application/fastman
lcl
application/x-digitalloca
lcr
application/x-digitalloca
lgh
application/lgh
lha
application/octet-stream
lml
x-lml/x-lml
lmlpack
x-lml/x-lmlpack
lsf
video/x-ms-asf
lsx
video/x-ms-asf
lzh
application/x-lzh
m13
application/x-msmediaview
m14
application/x-msmediaview
m15
audio/x-mod
m3u
audio/x-mpegurl
m3url
audio/x-mpegurl
ma1
audio/ma1
ma2
audio/ma2
ma3
audio/ma3
ma5
audio/ma5
man
application/x-troff-man
map
magnus-internal/imagemap
mbd
application/mbedlet
mct
application/x-mascot
mdb
application/x-msaccess
mdz
audio/x-mod
me
application/x-troff-me
mel
text/x-vmel
mi
application/x-mif
mid
audio/midi
midi
audio/midi
mif
application/x-mif
mil
image/x-cals
mio
audio/x-mio
mmf
application/x-skt-lbs
mng
video/x-mng
mny
application/x-msmoney
moc
application/x-mocha
mocha
application/x-mocha
mod
audio/x-mod
mof
application/x-yumekara
mol
chemical/x-mdl-molfile
mop
chemical/x-mopac-input
mov
video/quicktime
movie
video/x-sgi-movie
mp2
audio/x-mpeg
mp3
audio/x-mpeg
mp4
video/mp4
mpc
application/vnd.mpohun.certificate
mpe
video/mpeg
mpeg
video/mpeg
mpg
video/mpeg
mpg4
video/mp4
mpga
audio/mpeg
mpn
application/vnd.mophun.application
mpp
application/vnd.ms-project
mps
application/x-mapserver
mrl
text/x-mrml
mrm
application/x-mrm
ms
application/x-troff-ms
mts
application/metastream
mtx
application/metastream
mtz
application/metastream
mzv
application/metastream
nar
application/zip
nbmp
image/nbmp
nc
application/x-netcdf
ndb
x-lml/x-ndb
ndwn
application/ndwn
nif
application/x-nif
nmz
application/x-scream
nokia-op-logo
image/vnd.nok-oplogo-color
npx
application/x-netfpx
nsnd
audio/nsnd
nva
application/x-neva1
oda
application/oda
oom
application/x-AtlasMate-Plugin
pac
audio/x-pac
pae
audio/x-epac
pan
application/x-pan
pbm
image/x-portable-bitmap
pcx
image/x-pcx
pda
image/x-pda
pdb
chemical/x-pdb
application/pdf
pfr
application/font-tdpfr
pgm
image/x-portable-graymap
pict
image/x-pict
pm
application/x-perl
pmd
application/x-pmd
png
image/png
pnm
image/x-portable-anymap
pnz
image/png
pot
application/vnd.ms-powerpoint
ppm
image/x-portable-pixmap
pps
application/vnd.ms-powerpoint
ppt
application/vnd.ms-powerpoint
pqf
application/x-cprplayer
pqi
application/cprplayer
prc
application/x-prc
proxy
application/x-ns-proxy-autoconfig
ps
application/postscript
ptlk
application/listenup
pub
application/x-mspublisher
pvx
video/x-pv-pvx
qcp
audio/vnd.qcelp
qt
video/quicktime
qti
image/x-quicktime
qtif
image/x-quicktime
r3t
text/vnd.rn-realtext3d
ra
audio/x-pn-realaudio
ram
audio/x-pn-realaudio
rar
application/x-rar-compressed
ras
image/x-cmu-raster
rdf
application/rdf+xml
rf
image/vnd.rn-realflash
rgb
image/x-rgb
rlf
application/x-richlink
rm
audio/x-pn-realaudio
rmf
audio/x-rmf
rmm
audio/x-pn-realaudio
rmvb
audio/x-pn-realaudio
rnx
application/vnd.rn-realplayer
roff
application/x-troff
rp
image/vnd.rn-realpix
rpm
audio/x-pn-realaudio-plugin
rt
text/vnd.rn-realtext
rte
x-lml/x-gps
rtf
application/rtf
rtg
application/metastream
rtx
text/richtext
rv
video/vnd.rn-realvideo
rwc
application/x-rogerwilco
s3m
audio/x-mod
s3z
audio/x-mod
sca
application/x-supercard
scd
application/x-msschedule
sdf
application/e-score
sea
application/x-stuffit
sgm
text/x-sgml
sgml
text/x-sgml
sh
application/x-sh
shar
application/x-shar
shtml
magnus-internal/parsed-html
shw
application/presentations
si6
image/si6
si7
image/vnd.stiwap.sis
si9
image/vnd.lgtwap.sis
sis
application/vnd.symbian.install
sit
application/x-stuffit
skd
application/x-Koan
skm
application/x-Koan
skp
application/x-Koan
skt
application/x-Koan
slc
application/x-salsa
smd
audio/x-smd
smi
application/smil
smil
application/smil
smp
application/studiom
smz
audio/x-smd
snd
audio/basic
spc
text/x-speech
spl
application/futuresplash
spr
application/x-sprite
sprite
application/x-sprite
spt
application/x-spt
src
application/x-wais-source
stk
application/hyperstudio
stm
audio/x-mod
sv4cpio
application/x-sv4cpio
sv4crc
application/x-sv4crc
svf
image/vnd
svg
image/svg-xml
svh
image/svh
svr
x-world/x-svr
swf
application/x-shockwave-flash
swfl
application/x-shockwave-flash
t
application/x-troff
tad
application/octet-stream
talk
text/x-speech
tar
application/x-tar
taz
application/x-tar
tbp
application/x-timbuktu
tbt
application/x-timbuktu
tcl
application/x-tcl
tex
application/x-tex
texi
application/x-texinfo
texinfo
application/x-texinfo
tgz
application/x-tar
thm
application/vnd.eri.thm
tif
image/tiff
tiff
image/tiff
tki
application/x-tkined
tkined
application/x-tkined
toc
application/toc
toy
image/toy
tr
application/x-troff
trk
x-lml/x-gps
trm
application/x-msterminal
tsi
audio/tsplayer
tsp
application/dsptype
tsv
text/tab-separated-values
tsv
text/tab-separated-values
ttf
application/octet-stream
ttz
application/t-time
txt
text/plain
ult
audio/x-mod
ustar
application/x-ustar
uu
application/x-uuencode
uue
application/x-uuencode
vcd
application/x-cdlink
vcf
text/x-vcard
vdo
video/vdo
vib
audio/vib
viv
video/vivo
vivo
video/vivo
vmd
application/vocaltec-media-desc
vmf
application/vocaltec-media-file
vmi
application/x-dreamcast-vms-info
vms
application/x-dreamcast-vms
vox
audio/voxware
vqe
audio/x-twinvq-plugin
vqf
audio/x-twinvq
vql
audio/x-twinvq
vre
x-world/x-vream
vrml
x-world/x-vrml
vrt
x-world/x-vrt
vrw
x-world/x-vream
vts
workbook/formulaone
wav
audio/x-wav
wax
audio/x-ms-wax
wbmp
image/vnd.wap.wbmp
web
application/vnd.xara
wi
image/wavelet
wis
application/x-InstallShield
wm
video/x-ms-wm
wma
audio/x-ms-wma
wmd
application/x-ms-wmd
wmf
application/x-msmetafile
wml
text/vnd.wap.wml
wmlc
application/vnd.wap.wmlc
wmls
text/vnd.wap.wmlscript
wmlsc
application/vnd.wap.wmlscriptc
wmlscript
text/vnd.wap.wmlscript
wmv
audio/x-ms-wmv
wmx
video/x-ms-wmx
wmz
application/x-ms-wmz
wpng
image/x-up-wpng
wpt
x-lml/x-gps
wri
application/x-mswrite
wrl
x-world/x-vrml
wrz
x-world/x-vrml
ws
text/vnd.wap.wmlscript
wsc
application/vnd.wap.wmlscriptc
wv
video/wavelet
wvx
video/x-ms-wvx
wxl
application/x-wxl
x-gzip
application/x-gzip
xar
application/vnd.xara
xbm
image/x-xbitmap
xdm
application/x-xdma
xdma
application/x-xdma
xdw
application/vnd.fujixerox.docuworks
xht
application/xhtml+xml
xhtm
application/xhtml+xml
xhtml
application/xhtml+xml
xla
application/vnd.ms-excel
xlc
application/vnd.ms-excel
xll
application/x-excel
xlm
application/vnd.ms-excel
xls
application/vnd.ms-excel
xlt
application/vnd.ms-excel
xlw
application/vnd.ms-excel
xm
audio/x-mod
xml
text/xml
xmz
audio/x-mod
xpi
application/x-xpinstall
xpm
image/x-xpixmap
xsit
text/xml
xsl
text/xml
xul
text/xul
xwd
image/x-xwindowdump
xyz
chemical/x-pdb
yz1
application/x-yz1
z
application/x-compress
zac
application/x-zaurus-zac
zip
application/zip
dotx
application/vnd.openxmlformats-officedocument.wordprocessingml.template
docx
application/vnd.openxmlformats-officedocument.wordprocessingml.document
xlsx
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet