/** * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved. * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * http://www.ewcms.com */ package com.ewcms.content.resource.service.operator; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ewcms.publication.PublishException; import com.ewcms.publication.uri.UriRuleable; /** * 以文件方式实现资源文件的操作 * <br> * 资源以文本的方式保存在服务器指定的文件中。 * * @author wangwei */ public class FileOperator implements ResourceOperatorable{ private static final Logger logger = LoggerFactory.getLogger(FileOperator.class); private String rootDirPath; public FileOperator(String rootDirPath){ this.rootDirPath = rootDirPath; } @Override public String write(InputStream source,UriRuleable uriRule) throws IOException { return write(source,uriRule,null); } @Override public String write(InputStream source,UriRuleable uriRule,String suffix) throws IOException { try { String uri = uriRule.getUri(); if(suffix != null && !suffix.equals("")){ uri = uri + "." + suffix; } OutputStream target = FileUtils.openOutputStream(getLocalFile(uri)); byte[] buff = new byte[1024 * 10]; while(source.read(buff) > 0){ target.write(buff); } target.flush(); target.close(); source.close(); return uri; } catch (PublishException e) { logger.error("Resource uri is error :{}",e); throw new IOException(e); } } @Override public void read(OutputStream output,String uri)throws IOException{ byte[] buff = new byte[1024 * 10]; InputStream input = new FileInputStream(getLocalFile(uri)); while(input.read(buff) > 0){ output.write(buff); } output.flush(); input.close(); output.close(); } @Override public void delete(String uri) throws IOException { FileUtils.forceDeleteOnExit(getLocalFile(uri)); } /** * 得到资源文件 * * @param uri 访问地址 * @return */ private File getLocalFile(String uri){ String root = rootDirPath; root = StringUtils.removeStart(root, "/"); root = StringUtils.removeEnd(root,"/"); String path = StringUtils.isBlank(root) ? uri : ("/"+root+uri); logger.debug("Resource path is {}",path); return new File(path); } }