Android实现文件上传功能(接收端用strust2)
首先是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的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 |

浙公网安备 33010602011771号