1

我正在编写一个快速网页来控制对基于网络的音频文件(讲座录音)存储库的访问。音频文件保存在 SAN 上,并使用 UNC 共享从 Web 服务器访问。

我想强制出现一个“保存”对话框,因为在测试过程中我们发现一些网络浏览器很难保存 mp3 文件。重要的是我们的学生可以保存文件,而不是仅仅听它。

另一个要求是,只有在学生点击同意尊重文件版权的复选框后,下载链接才可用。

我首先尝试在网站上使用作为域用户进行身份验证的虚拟目录。但是,如果我用命令按钮打开音频文件的 URL,网络浏览器可能会立即尝试播放它。

取而代之的是,我尝试使用 ADODB.stream 并使用 stream.LoadFromFile 将文件发送给具有适当内容处置的学生以强制下载。因为 LoadFromFile 使用文件路径,所以我不能使用 IIS 虚拟目录,因此必须让网站匿名登录访问我的网络共享。我通过使其作为域帐户运行来做到这一点,但这让我有点紧张,因为我认为它不太安全。

即使那样,我仍然无法达到预期的目标,因为 stream.LoadFromFile 命令似乎拒绝从网络共享读取文件。即使我用来运行站点的域登录具有对该网络共享的完全访问权限,它也会出现身份验证错误。

对于实现我的目标的替代方法有什么建议吗?

4

3 回答 3

3

将文件返回给浏览器时,将 mime-type 设置为“application/x-unknown” - 这将导致浏览器要求您下载,因为它不知道如何处理它。

浏览器有可能会读取文件扩展名并尝试变得聪明,但您对此无能为力。

于 2009-10-05T09:11:05.500 回答
2

您最好的选择是添加以下响应标题。

内容配置:附件;文件名=fname.ext

请参阅:http: //support.microsoft.com/kb/260519了解更多信息

于 2011-03-29T19:28:40.860 回答
0

我喜欢 ck 关于更改 mime 类型的答案(如果我排名的话,我会投票赞成)。这将解决不保存问题。

您可以修改响应标头以更改 mime 类型而不是使用 ADODB 尝试以下代码..

         Response.Clear()  
         Response.AddHeader("Content-Disposition", "attachment; filename=" & file.Name)  
         Response.AddHeader("Content-Length", file.Length.ToString())  
         Response.ContentType = "application/octet-stream"  
         Response.WriteFile(file.FullName)  
         Response.End 'if file does not exist  

您也可以尝试使用 ZIP 扩展名压缩音频文件。这将具有相同的效果,并且还会减少下载所需的带宽。如果您动态地进行缓存,您可能需要考虑缓存您的压缩文件。

尝试在这里查看完整代码 - http://www.xefteri.com/articles/show.cfm?id=8

您也可以将您的版权验证添加到预下载检查中。

于 2009-10-05T13:24:42.037 回答