Package com.iisigroup.cap.response

Source Code of com.iisigroup.cap.response.FileDownloadResult

/*
* FileDownloadResult.java
*
* Copyright (c) 2009-2012 International Integrated System, Inc.
* 11F, No.133, Sec.4, Minsheng E. Rd., Taipei, 10574, Taiwan, R.O.C.
* All Rights Reserved.
*
* Licensed Materials - Property of International Integrated System,Inc.
*
* This software is confidential and proprietary information of
* International Integrated System, Inc. ("Confidential Information").
*/
package com.iisigroup.cap.response;

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

import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.iisigroup.cap.component.IRequest;
import com.iisigroup.cap.exception.CapException;
import com.iisigroup.cap.utils.CapString;

/**
* <pre>
* File Download
* </pre>
*
* @since 2010/11/24
* @author iristu
* @version <ul>
*          <li>iristu,2010/11/24,new
*          <li>2011/11/1,rodeschen,from cap
*          <li>2013/4/15,iristu,修正IE7下載時錯誤
*          </ul>
*/
@SuppressWarnings("serial")
public class FileDownloadResult implements IResult {

  protected final Logger logger = LoggerFactory.getLogger(getClass());

  protected String _file;
  protected String _outputName;
  protected String _contentType;
  protected IRequest _request;
  private String encoding;

  public FileDownloadResult() {
    super();
  }

  public FileDownloadResult(IRequest request, String file, String contentType) {
    this(request, file, null, contentType);
  }

  public FileDownloadResult(IRequest request, String file, String outputName,
      String contentType) {
    this._request = request;
    this._file = file;
    this._outputName = CapString.isEmpty(outputName) ? FilenameUtils
        .getName(_file) : outputName;
    this._contentType = contentType;
  }

  /*
   * (non-Javadoc)
   *
   * @see tw.com.iisi.cap.response.IResult#getResult()
   */
  @Override
  public String getResult() {
    return "";
  }// ;

  @Override
  public String getLogMessage() {
    return new StringBuffer("Download file:").append(_file).toString();
  }

  @Override
  public void add(IResult result) {
    if (result instanceof FileDownloadResult) {
      FileDownloadResult r = (FileDownloadResult) result;
      this._request = r._request;
      this._contentType = r._contentType;
      this._file = r._file;
      this._outputName = r._outputName;
    }
  }

  @Override
  public String getContextType() {
    return this._contentType;
  }

  @Override
  public String getEncoding() {
    return this.encoding;
  }

  @Override
  public void setContextType(String cxtType) {
    this._contentType = cxtType;
  }

  @Override
  public void setEncoding(String encoding) {
    this.encoding = encoding;
  }

  public void respondResult(ServletResponse response) {
    InputStream in = null;
    OutputStream output = null;
    try {
      response.setContentType(_contentType);
      if (_outputName != null && response instanceof HttpServletResponse) {
        HttpServletResponse resp = (HttpServletResponse) response;
        resp.setHeader("Content-Disposition", "attachment;filename=\""
            + _outputName + "\"");
        resp.setHeader("Cache-Control", "public");
        resp.setHeader("Pragma", "public");
      }
      output = response.getOutputStream();
      File file = new File(_file);
      int length = -1;
      // Stream to the requester.
      byte[] bbuf = new byte[1024 * 1024];
      int len = 0;
      in = new FileInputStream(file);
      while ((in != null) && ((length = in.read(bbuf)) != -1)) {
        output.write(bbuf, 0, length);
        len += length;
      }
      response.setContentLength(len);
      output.flush();
    } catch (Exception e) {
      throw new CapException(e, getClass());
    } finally {
      IOUtils.closeQuietly(in);
      IOUtils.closeQuietly(output);
    }

  }// ;

}
TOP

Related Classes of com.iisigroup.cap.response.FileDownloadResult

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.