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

来源:互联网 发布:巨人的陨落英文版 知乎 编辑:程序博客网 时间:2024/06/18 11:49

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

比如现在上传到到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>


0 0
原创粉丝点击