首先是Android端的上传工具类:
/** * 本类可以完成一个或多个文件的提交。 结构非常简单直接看代码就可以了。 * * @author janken
*/ public class FileUpload { /** * 提交文件的地址. */ private String url = null; /** * 要提交的文件. */ private List<File> 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<File>(); } /** * 通过这个方法来添加要提交的文件。 * * * @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的配置:
<package name="upload" namespace="/file" extends="json-default"> <action name="upload" class="cn.self.janken.util.file.upload.action.UploadFileAction" method="uploadFile"> <interceptor-ref name="fileUpload"> <!-- 配置允许上传的文件类型,多个用","分隔 --> <!-- 3gp,avi,bmp,(jpg\jpeg),mp4,wav --> <param name="allowedTypes"> video/3gpp,video/x-msvideo,application/x-MS-bmp,image/jpeg,video/mp4,audio/x-wav </param> <!-- 配置允许上传的文件大小,单位字节 100M --> <param name="maximumSize">100000000</param> </interceptor-ref> <interceptor-ref name="defaultStack" /> <param name="savePath">/upload</param> <result type="json"> <param name="root">result</param> </result> </action> </package>
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的类型对照如下:
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 |