首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在servlets中显示来自文件位置的视频

如何在servlets中显示来自文件位置的视频
EN

Stack Overflow用户
提问于 2015-10-05 14:29:11
回答 2查看 4.2K关注 0票数 0

我想要显示文件夹(不是项目文件夹)中的视频。我使用servlet完成了这项工作,如下所示

代码语言:javascript
运行
复制
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Video extends HttpServlet {


    public void doGet(HttpServletRequest request,HttpServletResponse response)
             throws IOException
    {
        response.setContentType("video/mp4");
        ServletOutputStream out;
        out = response.getOutputStream();
        FileInputStream fin = new FileInputStream("D:/7-4/Html/myvideo");

        BufferedInputStream bin = new BufferedInputStream(fin);
        BufferedOutputStream bout = new BufferedOutputStream(out);
        int ch =0;
        while((ch=bin.read())!=-1)
        {
            bout.write(ch);
        }

        bin.close();
        fin.close();
        bout.close();
        out.close();
    }
}

但是当我运行这个项目时,该网页不能使用浏览器的视频插件运行(它可以运行mp4视频)。但是当我尝试保存它(使用cntr+s)时,它被正确地保存了,请告诉我实现这一点的正确方法。我知道它可以显示图片和pdf文件,但是当它显示视频时,浏览器不能运行视频,这就是我问这个问题的原因

EN

回答 2

Stack Overflow用户

发布于 2015-10-05 14:35:36

您正在使用下面这行代码设置响应的Content-Type

response.setContentType("video/mp4");

浏览器将检查响应中的Content-Type标头,以确定如何处理视频文件。

如果要返回mp4以外的视频,则应在响应中指定正确的Content-Type值。否则,浏览器将无法正确播放视频。

不同扩展名的视频返回正确的Content-Type值,请参考http://www.sitepoint.com/web-foundations/mime-types-complete-list/

编辑:看起来你的原始代码是在输出流中写入整数而不是字节。从本质上讲,您是将原始视频文件转换为数字流,然后将数字写回。这应该是读取视频文件的正确方式:

代码语言:javascript
运行
复制
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Video extends HttpServlet {


    public void doGet(HttpServletRequest request,HttpServletResponse response)
         throws IOException
    {
        response.setContentType("video/mp4");
        ServletOutputStream out = response.getOutputStream();
        FileInputStream fin = new FileInputStream("D:/7-4/Html/myvideo");

        byte [] buf = new byte[4096];
        int read;
        while((read = fin.read(buf)) != -1)
        {
            out.write(buf, 0, read);
        }

        fin.close();
        out.flush();
        out.close();
    }
}
票数 1
EN

Stack Overflow用户

发布于 2015-10-05 14:37:10

要使用Servlet显示文件,至少需要指定3个响应头:Content-TypeContent-DispositionContent-Length

mp4的内容类型为video/mp4。内容部署必须是inline,内容长度将是数据的整个长度。

因此,在将数据写入响应OutputStream之前,只需添加以下内容

代码语言:javascript
运行
复制
response.setHeader("Content-Disposition", "inline; filename="+ fileName +";");

其中,fileName是mp4文件的确切名称。

有关如何完成此操作的示例,请参阅我的previously answered SO question

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32942494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档