Internet Information Services(IIS)服务器环境下请求视频文件
原创
©著作权归作者所有:来自51CTO博客作者g201909的原创作品,请联系作者获取转载授权,否则将追究法律责任
IIS(Internet Information Services)是一款 Web 服务器软件,它负责接收来自客户端的 HTTP 请求,并向客户端提供 HTTP 响应。当客户端请求访问某个文件时,服务器需要知道这个文件的 MIME 类型,才能正确地处理它。
MIME(Multipurpose Internet Mail Extensions)类型是一种标准化的方式,用于识别文件的类型。它是在 Web 开发早期发明的,旨在解决在 Web 上传输多媒体文件的问题。它通过将文件类型编码为 MIME 类型,使得 Web 服务器和 Web 浏览器能够正确地处理这些文件。
在 IIS 中,指定 MIME 类型可以确保服务器正确地处理客户端请求。如果服务器无法识别请求的文件类型,它可能无法正确地解析文件内容或将其发送到客户端。例如,如果客户端请求一个名为 "file.mp4" 的视频文件,但服务器不知道这是一个 MP4 文件,它可能无法正确地处理该文件,导致无法播放或下载该文件。
因此,为了确保服务器能够正确地处理所有客户端请求,必须在 IIS 中指定 MIME 类型。这可以通过配置 IIS 的 MIME 映射来实现,使服务器能够识别并正确地处理客户端请求中包含的文件类型。
- 打开 Internet Information Services(IIS)管理器,找到你的网站,右键单击该网站,选择“添加应用程序”。
- 在“添加应用程序”对话框中,指定别名、应用程序池和物理路径等相关信息,然后单击“确定”按钮。
- 在应用程序的物理路径中,创建一个名为“Media”的文件夹,用于存放媒体文件。
- 在 IIS 中为该文件夹添加 MIME 类型,以便服务器能够正确地识别媒体文件的格式。例如,你可以添加以下 MIME 类型:
- .mp4 video/mp4
- .mov video/quicktime
- .avi video/x-msvideo
- .wmv video/x-ms-wmv
- 创建一个名为“StreamVideo.aspx”的 ASP.NET 网页,用于流式传输媒体文件。该网页可以使用以下代码实现:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.Web.UI.WebControls" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
string filePath = Request.QueryString["file"];
if (filePath != null)
{
string fileName = Path.GetFileName(filePath);
string extension = Path.GetExtension(filePath);
string contentType = "";
switch (extension)
{
case ".mp4":
contentType = "video/mp4";
break;
case ".mov":
contentType = "video/quicktime";
break;
case ".avi":
contentType = "video/x-msvideo";
break;
case ".wmv":
contentType = "video/x-ms-wmv";
break;
default:
Response.StatusCode = 404;
Response.End();
break;
}
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Buffer = false;
Response.ContentType = contentType;
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
using (FileStream fileStream = new FileStream(Server.MapPath(filePath), FileMode.Open, FileAccess.Read))
{
long length = fileStream.Length;
long startBytes = 0;
int packSize = 1024 * 8; //10kb
if (Request.Headers["Range"] != null)
{
Response.StatusCode = 206;
string[] range = Request.Headers["Range"].Split(new char[] { '=', '-' });
startBytes = Convert.ToInt64(range[1]);
}
Response.AddHeader("Content-Length", (length - startBytes).ToString());
Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, length - 1, length));
fileStream.Seek(startBytes, SeekOrigin.Begin);
int maxCount = (int)Math.Ceiling((length - startBytes + 0.0) / packSize);
for (int i = 0; i < maxCount && Response.IsClientConnected; i++)
{
Response.BinaryWrite(fileStream.ReadBytes(packSize));
}
}
Response.Flush();
Response.End();
}
else
{
Response.StatusCode = 404;
Response.End();
}
}
</script>
- 可以通过以下格式请求媒体文件:
http://<your server>/<your website>/StreamVideo.aspx?file=<your media file>
其中,<your server> 是指你的服务器地址,<your website> 是指你的网站名称,<your media file> 是指你要请求的媒体文件相对于 Media
例如,如果你的服务器地址为 192.168.1.100,你的网站名称为 MyWebsite,你的媒体文件位于 Media 文件夹下的 video.mp4
http://192.168.1.100/MyWebsite/StreamVideo.aspx?file=Media/video.mp4
请注意,在这个例子中,媒体文件的路径相对于 StreamVideo.aspx 文件的位置。因此,如果你的 StreamVideo.aspx