/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.cms;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import com.jinhe.tss.cms.service.IRemoteArticleService;
import com.jinhe.tss.core.Global;
import com.jinhe.tss.core.exception.BusinessServletException;
import com.jinhe.tss.core.util.EasyUtils;
/**
* <p> DownloadServlet.java </p>
* 下载文章附件。传入文章ID以及附件的序号即可下载该附件。
* 如果是PMS等其它应用配置被servlet,需要这些应用和CMS部署在同一台机器上才行。
*/
public class DownloadServlet extends HttpServlet {
private static final long serialVersionUID = -6788424017181628016L;
private Logger log = Logger.getLogger(this.getClass());
IRemoteArticleService service;
public void init() {
service = (IRemoteArticleService) Global.getContext().getBean("RemoteArticleService");
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Long id;
Integer seqNo;
try{
id = new Long(request.getParameter("id"));
seqNo = new Integer(request.getParameter("seqNo"));
} catch(Exception e) {
throw new BusinessServletException("下载附件时参数值有误", e);
}
AttachmentDTO attachment = service.getAttachmentInfo(id, seqNo);
if(attachment == null){
log.error("附件不存在");
return;
}
String docOrPicPath = "";
String fileName = attachment.getFileName();
String fileExt = attachment.getFileExt();
if(attachment.isImage()){ // 相关图片
if("gif".equals(fileExt)){ response.setContentType("image/gif"); }
if("jpg".equals(fileExt) || "jpeg".equals(fileExt)){ response.setContentType("image/jpeg"); }
if("png".equals(fileExt)){ response.setContentType("image/png"); }
if("bmp".equals(fileExt)){ response.setContentType("image/bmp"); }
docOrPicPath = attachment.getBasePath()[2];
response.reset(); // 设置附件下载页面
}
else if(attachment.isOfficeDoc()){ // 相关附件
docOrPicPath = attachment.getBasePath()[1];
response.setContentType("application/octet-stream");// 设置附件类型
response.reset();// 设置附件下载页面
fileName = (fileExt != null && !"".equals(fileExt)) ? (fileName + "." + fileExt) : fileName;
response.setHeader("Content-Disposition", "attachment; filename=\"" + EasyUtils.toUtf8String(fileName) + "\"");
}
String filePath = attachment.getBasePath()[0] + "/" + docOrPicPath + "/" + attachment.getLocalPath();
ServletOutputStream out = null;
FileInputStream stream = null;
try {
out = response.getOutputStream();
File file = new File(filePath);
stream = new FileInputStream(file);
int bytesRead = 0;
final int length = 8192;
byte[] buffer = new byte[length];
while ((bytesRead = stream.read(buffer, 0, length)) != -1) {
out.write(buffer, 0, bytesRead);
out.flush();
}
} catch (IOException e) {
log.error("下载附件时IO异常,Message:" + e.getMessage() + ".Cause:"+ e.getCause());
} finally {
if (stream != null) {
stream.close();
}
if (out != null) {
out.close();
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}