如何在html5中播放mp4视频文件

时间:2013-12-30 11:02:58

标签: html5 video struts2

我是 struts2 的新手。

我使用struts2在系统指令中上传视频文件,但是当我想访问Html5文件中的上传内容以播放上传的视频文件时,我无法播放。 我在D:/ dk中的当前上传目录。但是当我把这条路径放在html代码中时,它就不起作用了。

行动类

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.net.URL;
import java.sql.Connection;
import javax.servlet.ServletContext;

import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionSupport;

public class FileUpload1 extends ActionSupport implements ServletContextAware {

    private File userImage;
    private String userImageContentType;
    private String userImageFileName;
    private ServletContext context;

    public String execute() {
        try {
            String path = context.getInitParameter("FileUploadPath");
            FileInputStream in = null;
            FileOutputStream out = null;
            in = new FileInputStream(getUserImage());
            String destFileName = path;

            File destFile = new File(destFileName);
            destFile.setReadable(false);
            if (!destFile.isDirectory()) {
                destFile.mkdir();
            }
            out = new FileOutputStream(new File(destFile+"\\"+userImageFileName));
                         byte[] buffer = new byte[1024];
            int c;
            while ((c = in.read(buffer)) != -1) {
                out.write(buffer,0,c);

            }

            if (null != in)
                in.close();
            if (null != out)
                out.close();
            return "success";
        } catch (Exception e) {
            e.printStackTrace();
            addActionError(e.getMessage());
            return "input";
        }
    }

    public File getUserImage() {
        return userImage;
    }

    public void setUserImage(File userImage) {
        this.userImage = userImage;
    }

    public String getUserImageContentType() {
        return userImageContentType;
    }

    public void setUserImageContentType(String userImageContentType) {
        this.userImageContentType = userImageContentType;
    }

    public String getUserImageFileName() {
        return userImageFileName;
    }

    public void setUserImageFileName(String userImageFileName) {
        this.userImageFileName = userImageFileName;
    }

    @Override
    public void setServletContext(ServletContext arg0) {
        context = arg0;
    }
}

的web.xml

<context-param>         
            <param-name>FileUploadPath</param-name>
            <param-value>D:\Dk</param-value>        
  </context-param>
   <filter>
                      <filter-name>f1</filter-name>     
                        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

      </filter>
  <filter-mapping>
    <filter-name>f1</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

index.jsp

<html>
    <head>
        <script type="text/javascript" src="jquery-1.3.2.min.js"></script>
        <script type="text/javascript" src="html5lightbox.js"></script>
    </head>

    <body>
            <a href="C:\Users\asus\Desktop\video1.mp4" class="html5lightbox" title="Altoopa">
                <img src="images/Playing-Altoopa.png"/>
            </a>
    </body>
</html>

我的问题是如何将上传视频的路径放在<a href....>标记中。我上传的文件位置为D:/Dk/dd.mp4

1 个答案:

答案 0 :(得分:0)

浏览器只访问Web应用程序公开的内容,而不是访问服务器硬盘上的任意位置 - 想象一下提供对服务器的全权访问意味着什么?!

相反,您需要从操作中对其进行流式传输,例如,使用stream结果类型,或者将服务器配置为允许访问特定资产目录等。

锚标记的href需要指向操作,并提供足够的信息来检索文件。您可以通过URL参数提供文件名,使用REST样式参数等

如果你要直接写回应(IMO是一个坏主意),你需要设置内容类型和可能的长度等等。我认为stream结果类型会更好,不过


不相关,但你的行动课做得太多了;除了execute方法之外,文件IO工作应该在某个地方完成,比如在服务或实用程序类中。