Servlet从服务器下载文件

public class DownloadOfUrl extends HttpServlet{
	
	private final String ENCODING="GB2312";
	
	private final String CONTENT_TYPE="text/html;charset=GB2312";
	
	
	@Autowired
	private FileAttContentService fileAttContentService;
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);
	}
	
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding(ENCODING);
		response.setCharacterEncoding(ENCODING);
		InputStream inputStream = null;
		OutputStream outputStream = null;
		
		try {
			String fileid = request.getParameter("fileid");
			Long fileID = Long.parseLong(fileid);
			FileAttContent fileAttContent = fileAttContentService.get(fileID);
			
			if (fileAttContent!=null) {
				String filename = fileAttContent.getFilePath();
				if(filename==null||filename.trim().equals("")){
					response.setContentType(CONTENT_TYPE);
					PrintWriter printWriter = response.getWriter();
					printWriter.print("<font color=red>文件不存在</font>");
					printWriter.close();
				}else {
					String contentType = request.getSession().getServletContext().getMimeType(filename);
					if (contentType==null) {
						contentType = "application/octet-stream";
					}
					
					response.setContentType(contentType);
					response.setHeader("Content-Disposition", "attachment;filename="+filename+"");
		
					inputStream = new BufferedInputStream(new FileInputStream(filename));
					outputStream = new BufferedOutputStream(response.getOutputStream());
					ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
					byte[] b = new byte[4*1024];
					int read = 0;
						
					while((read=inputStream.read(b))!=-1){
						byteArrayOutputStream.write(b, 0, read);
					}
					outputStream.write(byteArrayOutputStream.toByteArray());
				}
			}
		} catch (Exception e) {
			if (e.getLocalizedMessage().equals("Entity Not Found")) {
				response.setContentType(CONTENT_TYPE);
				PrintWriter printWriter = response.getWriter();
				printWriter.print("<font color=red>文件不存在</font>");
				printWriter.close();
			}
			logger.error("process2()", e);
		}finally{
			if(inputStream!=null){inputStream.close();}
			if(outputStream!=null){outputStream.close();}
		}
}
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,config.getServletContext());
		super.init(config);
	}
	
	public void setFileAttContentService(
			FileAttContentService fileAttContentService) {
		this.fileAttContentService = fileAttContentService;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值