zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    学习Java书籍推荐和面试网站推荐
    Java 多线程学习扩展
    Java Excel 导入导出(二)
    Java Excel 导入导出(一)
    Matplotlib库(二)
    Matplotlib库(一)
    【转】MATLAB导出精美的论文插图
    图像的手绘效果
    Numpy库的使用(二)
    Numpy库的使用(一)
  • 原文地址:https://www.cnblogs.com/janken/p/2495650.html
Copyright © 2011-2022 走看看