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 pdf 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

你可能感兴趣的:(android)