我尝试返回要下载的文件时遇到一些奇怪的问题, 这是我的代码
string filePath = Path.Combine(Path1, Path2, filename);
return File(filePath, "audio/mp3", "myfile.mp3");
但是有问题,它会返回此错误
InvalidOperationException:未配置文件提供程序来处理提供的文件。
我不确定我错过了什么,有什么帮助吗?
答案 0 :(得分:2)
因此,返回File方法的方法如@SeM建议,但要从文件路径中删除文件名。
string filePath = Path.Combine(Path1, Path2);
IFileProvider provider = new PhysicalFileProvider(filePath);
IFileInfo fileInfo = provider.GetFileInfo(filename);
var readStream = fileInfo.CreateReadStream();
return File(readStream, "audio/mpeg", fileName);
答案 1 :(得分:0)
您首先需要创建文件提供商注册。
services.AddSingleton<IFileProvider>(
new PhysicalFileProvider(Directory.GetCurrentDirectory()));
然后您可以像这样使用它
public class IndexModel : PageModel
{
private readonly IFileProvider _fileProvider;
public IndexModel(IFileProvider fileProvider)
{
_fileProvider = fileProvider;
}
public IFileInfo FileInfo { get; private set; }
public void OnGet()
{
IFileInfo = _fileProvider.GetFileInfo("filename.ext");
}
}
在您的情况下,您的功能体会像
string filePath = Path.Combine(Path1, Path2, filename);
IFileInfo = _fileProvider.GetFileInfo(filepath);
var fs = fileInfo.CreateReadStream();
return File(fs, "audio/mp3", "myfile.mp3");
答案 2 :(得分:0)
在asp.net核心中,您需要PhysicalFileProvider才能访问物理文件系统:
string filePath = Path.Combine(Path1, Path2, filename);
IFileProvider provider = new PhysicalFileProvider(filePath);
IFileInfo fileInfo = provider.GetFileInfo(filename);
var readStream = fileInfo.CreateReadStream();
return File(readStream, "audio/mpeg", fileName);
据我所知,.mp3
文件的哑剧类型为audio/mpeg
。
答案 3 :(得分:0)
您只需从以下位置更改代码即可
string filePath = Path.Combine(Path1, Path2, filename);
return File(filePath, "audio/mp3", "myfile.mp3");
对此:
string filePath = Path.Combine(Path1, Path2, filename);
return PhysicalFile(filePath, "audio/mp3", "myfile.mp3");
然后问题解决了!
您还可以将文件放在wwwroot
文件夹(您的网络根目录文件夹)下。然后,您可以使用相对路径到网络根目录文件夹,并将filePath
放在File方法的第一个参数中。然后,您可以毫无问题地访问文件。这比使用PhysicalFile
方法要安全得多。