情况如下:
我们需要为Web应用程序的某些用户提供侦听记录为mp3文件的某些对话的功能。但是由于这些对话是私密的,所以我们希望以一种安全的方式进行传输(我知道如果使用SSL,这是自动完成的),并且我们不希望它们能够下载它们。
有什么方法可以将音频文件提供给客户端,以便可以收听音频但无法下载?
我知道这最终不会很安全,因为任何您可以在计算机上收听的内容都可以录制,但是至少我们希望通过不允许他人下载来使事情变得更加复杂一堆对话,然后将其复制到其他地方。例如,我正在考虑在Spotify中听一些歌曲,但不能下载它。
我将ASP MVC用作服务器,尽管我认为这更多是安全问题,而不是与特定技术相关的问题。我试图从控制器返回音频文件,但是Chrome为用户提供了下载文件的选项。
public ActionResult Stream(string mp3)
{
byte[] file = System.IO.File.ReadAllBytes("someVeryPrivateAudioFile.mp3");
return File(file, "audio/mpeg");
}
我们可以流式传输或以某种方式传输它以便用户可以收听但不能下载吗? 这甚至可能吗?
编辑1
好,现在我创建了一个带有以下标记的简单视图:
<audio controls="" controlsList="nodownload" autoplay="" name="media"><source src="https://MyServer/MyController/Stream" type="audio/mpeg"></audio>
我尝试提供一个巨大的(大约1 GB)的mp3文件,并且音频会立即播放(因此我想是缓冲的),没有可供下载的选项。到目前为止一切顺利。
再次,我知道这是不安全的,对于某人来说,解决此问题并仍然下载文件将是微不足道的,但这只是一个开始。
现在,我想为用户提供快速转发音频的选项。我已经检查了诸如How to stream an MP3 from an ASP.NET MVC Controller Action之类的其他问题,但找不到解决此问题的方法。
有什么想法吗?
答案 0 :(得分:1)
您向用户提供的所有服务器均可下载。 使用SSL不会改变任何事情,它只是帮助服务器和用户之间的某些“中间人”无法嗅探数据。用户浏览器将使用或不使用SSL解释相同的Web内容。
即使将其表示为音频流,某些浏览器插件也可以非常快速地下载它(例如youtube视频下载器)。
只有这样,您才能使音频更难以下载,那就是您要创建自己的音频块并播放第一个块。然后创建您自己的js,它将准备下一个块,并在第一个块结束后开始播放。然后是三分之四,四分之三等。您可以轻松地创建它以使其平稳运行,但是您失去了在音频时间戳中导航的功能。
您也可以解决该问题,但是它也需要一些智能代码。 Ot正在彻底改变网络流的车轮:)