文件上传和文件获取及ckplay地址

文件上传,上传的地址在项目路径外。

比如现在上传到到E:\upload\uploadFile下。

文件类型为视频类型。

这个时候需要自己建一个servlet。因为如果要播放视频,需要将路径映射到E:\upload下。

这样读取视频就会非常方便。

代码:注意:url。这个后面要用上的。

@WebServlet(asyncSupported=true	//支持异步
	,urlPatterns={"/templates/*"}//路径
	,loadOnStartup=2
	,name="myDefault"
	,initParams={		//配置文件路径
				
			}
)
public class DefaultServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String fullPath = getRealPath(request);
        response.setDateHeader("Expires", System.currentTimeMillis() + 1000 * 60 * 60 * 24);
        response.setHeader("Cache-Control", "max-age=60");
        ServletOutputStream os = response.getOutputStream();

        FileInputStream is = null;
        try {
            is = new FileInputStream(fullPath);
            IOUtils.copy(is, os);
        } catch (FileNotFoundException e) {
            response.setStatus(404);
            return;
        } finally {
            if (null != is) {
                is.close();
            }
            if (os != null) {
                os.flush();
                os.close();
            }
        }
    }
    
    private String getRealPath(HttpServletRequest request) {
    	String cxtPath = request.getContextPath();
        String pathInfo = request.getPathInfo();
        String uri = request.getRequestURI().substring(cxtPath.length());
        if(pathInfo == null){
        	pathInfo = uri;
        }
        String contentFilePath = Constants.UPLOAD_FILE.replaceAll("\\\\", "/");
        return contentFilePath+pathInfo;
    }
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        doGet(request, response);
    }

    @Override
    protected long getLastModified(HttpServletRequest request) {
        String fullPath = getRealPath(request);
        File file = new File(fullPath);
        if (file.exists()) {
            return file.lastModified();
        } else {
            return super.getLastModified(request);
        }
    }
}

Constants.UPLOAD_FILE即为上传到的地址。

上传的地址都统一将Constants.UPLOAD_FILE(E:\upload\uploadFile)给去掉,最后只剩下一段存储的路径。为什么要去掉?因为以后可能会改变上传的地址。所以改变。

接着,比如我要播放视频,用的ckplay,代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="r" uri="r-tag"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt_rt"%>
<input type="hidden" id="videoPath" value="${uploadFilePath }${resourceUri }">

    <div class="">
	   <div id="a1" class="text-center"></div>
	</div>
	<script src="<c:url value="/resources/js/ckplayer/ckplayer.js" />"></script>
	<script type="text/javascript" charset="utf-8">
		var hostPost = "http://"+window.location.host;
		var flashvars = {
			f : ROOT_PATH+ $("#videoPath").val(),
			c : 0,
			b : 1,
			x : ''
		};
		var params = {
			bgcolor : '#FFF',
			allowFullScreen : true,
			allowScriptAccess : 'always',
			hostPost:window.location.host
		};
		CKobject.embedSWF(hostPost + '/resources/js/ckplayer/ckplayer.swf',
				'a1', 'ckplayer_a1', '96%', '100%', flashvars, params); 
		
	</script>

如果这里用的是超酷播放器,需要格外注意的是:hostPost。

如果hostPost是localhost:8080,而没有加上http://,那么将会播放不出任何东西。(这个问题想了半天,,,一定要记住)奇怪的是firBug也没报错,,,

然后这里有个${uploadFilePath}和${resourceUri}。

${uploadFilePath}为"/templates/",这个因为servlet要处理这种请求来获取上传的资源。


这样写有个好处,因为我上传的资源还有HTML包,也就是一大堆的HTML静态文件。

这些HTML文件之间是有联系的。

而这样获取文件,会非常方便。


附上web.xml的servlet配置

<servlet>
<servlet-name>myDefault</servlet-name>
<servlet-class>com.boventech.util.DefaultServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myDefault</servlet-name>
<url-pattern>/templates/*</url-pattern>
</servlet-mapping>


你可能感兴趣的:(文件上传,文件获取,ckplay地址)