1

我为客户从我的网站下载内容(视频)创建了一个 HttpHandler (.ashx)。首先我使用的是 WriteFile 方法,我意识到它需要大量内存,然后我决定将其更改为 TransmitFile 方法。

但是发生了一件奇怪的事情,我无法再下载多个。我不得不等待下载完成并开始另一个。

基本上代码是这样的:

        System.IO.FileInfo file = new System.IO.FileInfo(file_path);

        context.Response.Clear();

        if (flagH264)
        {
            context.Response.ContentType = "video/mp4";
        }
        else
        {
            context.Response.ContentType = "video/x-ms-wmv";
        }

        context.Response.AddHeader("Content-Length", file.Length.ToString());
        context.Response.AddHeader("Content-Disposition", "attachment; filename=" + name);

        //context.Response.WriteFile(file_path.Trim());
        context.Response.TransmitFile(file_path.Trim());
        context.Response.Flush();

任何人都可能知道这是什么问题?

4

1 回答 1

0

我发现了问题所在。

我用于下载页面的 HttpHandler (ashx) 正在实现一个接口 IRequireSessionState,它赋予我操作会话数据的读/写权限。当使用 TransmitFile 方法时,IIS 会阻止系统上的任何操作,以保护会话数据不被更改。

解决方案是更改IReadOnlySessionState的IRequireSessionState,它只提供对会话数据的读取访问权限,无需提供任何类型的安全性,阻止用户操作。

于 2013-03-26T19:04:36.800 回答