我想要显示文件夹(不是项目文件夹)中的视频。我使用servlet完成了这项工作,如下所示
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文件,但是当它显示视频时,浏览器不能运行视频,这就是我问这个问题的原因
发布于 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/。
编辑:看起来你的原始代码是在输出流中写入整数而不是字节。从本质上讲,您是将原始视频文件转换为数字流,然后将数字写回。这应该是读取视频文件的正确方式:
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();
}
}
发布于 2015-10-05 14:37:10
要使用Servlet显示文件,至少需要指定3个响应头:Content-Type
、Content-Disposition
和Content-Length
。
mp4的内容类型为video/mp4
。内容部署必须是inline
,内容长度将是数据的整个长度。
因此,在将数据写入响应OutputStream
之前,只需添加以下内容
response.setHeader("Content-Disposition", "inline; filename="+ fileName +";");
其中,fileName
是mp4文件的确切名称。
有关如何完成此操作的示例,请参阅我的previously answered SO question。
https://stackoverflow.com/questions/32942494
复制相似问题