<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    [collection]struts download Action

    Posted on 2005-12-07 17:21 BlueO2 閱讀(722) 評論(1)  編輯  收藏 所屬分類: MVC Framework
    雖然struts上傳下載文件很簡單,但是封裝一下還是好地。
    /*
    * $Id: DownloadAction.java 164530 2005-04-25 03:11:07Z niallp $
    *
    * Copyright 2004-2005 The Apache Software Foundation.
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    *      http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */



    package org.apache.struts.actions;

    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;

    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;


    /**
    * This is an abstract base class that minimizes the amount of special coding
    * that needs to be written to download a file. All that is required to use
    * this class is to extend it and implement the <code>getStreamInfo()</code>
    * method so that it returns the relevant information for the file (or other
    * stream) to be downloaded. Optionally, the <code>getBufferSize()</code>
    * method may be overridden to customize the size of the buffer used to
    * transfer the file.
    *
    * @since Struts 1.2.6
    */

    public abstract class DownloadAction extends Action {

        /**
         * If the <code>getBufferSize()</code> method is not overridden, this is
         * the buffer size that will be used to transfer the data to the servlet
         * output stream.
         */

        protected static final int DEFAULT_BUFFER_SIZE = 1024 * 4;

        /**
         * Returns the information on the file, or other stream, to be downloaded
         * by this action. This method must be implemented by an extending class.
         *
         * @param mapping  The ActionMapping used to select this instance.
         * @param form     The optional ActionForm bean for this request (if any).
         * @param request  The HTTP request we are processing.
         * @param response The HTTP response we are creating.
         *
         * @return The information for the file to be downloaded.
         *
         * @throws Exception if an exception occurs.
         */

        protected abstract StreamInfo getStreamInfo(ActionMapping mapping,
                ActionForm form, HttpServletRequest request,
                HttpServletResponse response)
                throws Exception;

        /**
         * Returns the size of the buffer to be used in transferring the data to
         * the servlet output stream. This method may be overridden by an extending
         * class in order to customize the buffer size.
         *
         * @return The size of the transfer buffer, in bytes.
         */

        protected int getBufferSize() {
            return DEFAULT_BUFFER_SIZE;
        }

        /**
         * Process the specified HTTP request, and create the corresponding HTTP
         * response (or forward to another web component that will create it).
         * Return an <code>ActionForward</code> instance describing where and how
         * control should be forwarded, or <code>null</code> if the response has
         * already been completed.
         *
         * @param mapping  The ActionMapping used to select this instance.
         * @param form     The optional ActionForm bean for this request (if any).
         * @param request  The HTTP request we are processing.
         * @param response The HTTP response we are creating.
         *
         * @throws Exception if an exception occurs.
         */

        public ActionForward execute(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {

            StreamInfo info = getStreamInfo(mapping, form, request, response);
            String contentType = info.getContentType();
            InputStream stream = info.getInputStream();

            try {
                response.setContentType(contentType);
                copy(stream, response.getOutputStream());
            } finally {
                if (stream != null) {
                    stream.close();
                }
            }

            // Tell Struts that we are done with the response.
            return null;
        }

        /**
         * Copy bytes from an <code>InputStream</code> to an
         * <code>OutputStream</code>.
         *
         * @param input  The <code>InputStream</code> to read from.
         * @param output The <code>OutputStream</code> to write to.
         *
         * @return the number of bytes copied
         *
         * @throws IOException In case of an I/O problem
         */

        public int copy(InputStream input, OutputStream output)
                throws IOException {
            byte[] buffer = new byte[getBufferSize()];
            int count = 0;
            int n = 0;
            while (-1 != (n = input.read(buffer))) {
                output.write(buffer, 0, n);
                count += n;
            }
            return count;
        }

        /**
         * The information on a file, or other stream, to be downloaded by the
         * <code>DownloadAction</code>.
         */

        public static interface StreamInfo {

            /**
             * Returns the content type of the stream to be downloaded.
             *
             * @return The content type of the stream.
             */

            public abstract String getContentType();

            /**
             * Returns an input stream on the content to be downloaded. This stream
             * will be closed by the <code>DownloadAction</code>.
             *
             * @return The input stream for the content to be downloaded.
             */

            public abstract InputStream getInputStream() throws IOException;
        }

        /**
         * A concrete implementation of the <code>StreamInfo</code> interface which
         * simplifies the downloading of a file from the disk.
         */

        public static class FileStreamInfo implements StreamInfo {

            /**
             * The content type for this stream.
             */

            private String contentType;

            /**
             * The file to be downloaded.
             */

            private File file;

            /**
             * Constructs an instance of this class, based on the supplied
             * parameters.
             *
             * @param contentType The content type of the file.
             * @param file        The file to be downloaded.
             */

            public FileStreamInfo(String contentType, File file) {
                this.contentType = contentType;
                this.file = file;
            }

            /**
             * Returns the content type of the stream to be downloaded.
             *
             * @return The content type of the stream.
             */

            public String getContentType() {
                return this.contentType;
            }

            /**
             * Returns an input stream on the file to be downloaded. This stream
             * will be closed by the <code>DownloadAction</code>.
             *
             * @return The input stream for the file to be downloaded.
             */

            public InputStream getInputStream() throws IOException {
                FileInputStream fis = new FileInputStream(file);
                BufferedInputStream bis = new BufferedInputStream(fis);
                return bis;
            }
        }

        /**
         * A concrete implementation of the <code>StreamInfo</code> interface which
         * simplifies the downloading of a web application resource.
         */

        public static class ResourceStreamInfo implements StreamInfo {

            /**
             * The content type for this stream.
             */

            private String contentType;

            /**
             * The servlet context for the resource to be downloaded.
             */

            private ServletContext context;

            /**
             * The path to the resource to be downloaded.
             */

            private String path;

            /**
             * Constructs an instance of this class, based on the supplied
             * parameters.
             *
             * @param contentType The content type of the file.
             * @param context     The servlet context for the resource.
             * @param path        The path to the resource to be downloaded.
             */

            public ResourceStreamInfo(String contentType, ServletContext context,
                    String path) {
                this.contentType = contentType;
                this.context = context;
                this.path = path;
            }

            /**
             * Returns the content type of the stream to be downloaded.
             *
             * @return The content type of the stream.
             */

            public String getContentType() {
                return this.contentType;
            }

            /**
             * Returns an input stream on the resource to be downloaded. This stream
             * will be closed by the <code>DownloadAction</code>.
             *
             * @return The input stream for the resource to be downloaded.
             */

            public InputStream getInputStream() throws IOException {
                return context.getResourceAsStream(path);
            }
        }
    }

    Feedback

    # 請教[未登錄]  回復  更多評論   

    2008-08-15 17:17 by ling
    在eclipse+dreamwaver 8編程時,文件在dreamwaver中可以顯示但在eclipse中沒有顯示,為什么??請多多指教??萬分感謝,我的郵箱是 lingqiaoxu@sina.com

    只有注冊用戶登錄后才能發(fā)表評論。


    網站導航:
     

    posts - 29, comments - 3, trackbacks - 0, articles - 0

    Copyright © BlueO2

    主站蜘蛛池模板: 色猫咪免费人成网站在线观看| 中文字幕一区二区三区免费视频| 免费无码毛片一区二区APP| 伊人久久综在合线亚洲91| xxxxx做受大片视频免费| 亚洲av手机在线观看| 偷自拍亚洲视频在线观看| 一区二区三区亚洲视频| 一级毛片成人免费看a| 亚洲国产主播精品极品网红| 一区二区三区精品高清视频免费在线播放| 国产91在线免费| 亚洲精品偷拍视频免费观看| 日韩亚洲变态另类中文| 日韩精品免费视频| 亚洲人成综合在线播放| 美女黄网站人色视频免费国产| 337P日本欧洲亚洲大胆精品| 亚洲性日韩精品国产一区二区| 美女网站在线观看视频免费的| 亚洲av无码乱码国产精品fc2 | 亚洲色图校园春色| 国产成人无码免费看视频软件| 色噜噜亚洲男人的天堂| 四虎影永久在线高清免费| 久久国产精品免费一区| 日木av无码专区亚洲av毛片| 日韩精品无码区免费专区| 国产精品亚洲精品日韩电影| 亚洲永久精品ww47| 2021免费日韩视频网| 青娱乐在线视频免费观看| 亚洲动漫精品无码av天堂| 亚洲第一成年免费网站| 曰批全过程免费视频观看免费软件| 亚洲精品国产品国语在线| 免费福利网站在线观看| 一级毛片不卡免费看老司机| 97久久精品亚洲中文字幕无码 | 亚洲欧洲日本国产| 国产免费69成人精品视频|