ASP.NET MVC:检索.mp3文件并将其返回给用户
本文关键字:返回 给用户 文件 mp3 NET MVC 检索 ASP | 更新日期: 2023-09-27 17:56:42
我目前有一个包含链接的HTML页面:
<a href="javascript:void()" onclick="return getAudioFile('fileLocation');">Listen</a>
单击"收听"链接调用此函数:
function getRecordingFile(fileLocation) {
};
最终应该调用此控制器方法:
[HttpPost]
public ActionResult GetAudioFile(string fileLocation)
{
return null;
}
我已经清空了函数和方法,因为我尝试了几种不同的方式来实现这一目标:我需要从本地位置访问音频文件,并允许用户在单击Listen
链接时收听/下载它。
这似乎是最好的方法是什么?
以下是最终结果:
[HttpGet]
public ActionResult GetAudioFile(string fileLocation)
{
var bytes = new byte[0];
using (var fs = new FileStream(fileLocation, FileMode.Open, FileAccess.Read)
{
var br = new BinaryReader(fs);
long numBytes = new FileInfo(fileLocation).Length;
buff = br.ReadBytes((int)numBytes);
}
return File(buff, "audio/mpeg", "callrecording.mp3");
}
在页面上,链接是:
<a href="/Controller/GetAudioFile?fileName=@fileLocation">Listen</a>
感谢我的老板的帮助。
也许使用文件结果?
[HttpPost]
public FileResult GetAudioFile(string fileLocation)
{
using(FileStream fs = new FileStream(fileLocation)){
return File(fs.ToArray(), "audio/mpeg");
}
}
其他答案不会启用部分内容,因此用户无法搜索。
在继续之前,还应确保攻击者无法通过提供../../file
或类似路径来遍历文件系统
[HttpGet]
public ActionResult GetAudioFile(string fileLocation)
{
using var fs = new FileStream(fileLocation, FileMode.Open, FileAccess.Read);
using var br = new BinaryReader(fs);
long numBytes = new FileInfo(fileLocation).Length;
var buff = br.ReadBytes((int)numBytes);
var fileResult = File(buff, "audio/mpeg", "callrecording.mp3");
fileResult.EnableRangeProcessing = true;
return fileResult;
}