InvalidOperationException при возврате файла - PullRequest
0 голосов
/ 05 декабря 2018

сталкиваюсь с какой-то странной проблемой, когда я пытаюсь вернуть файл для загрузки, поэтому это мой код

string filePath = Path.Combine(Path1, Path2, filename);
return File(filePath, "audio/mp3", "myfile.mp3");

, но проблема в том, что эта ошибка возвращает

InvalidOperationException: ни один файл-провайдер не был настроен для обработки предоставленного файла.

не уверен, что я пропустил, любая помощь?

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

В ядре 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);

Также, насколько я знаю, MIME-тип .mp3 файла равен audio/mpeg.

0 голосов
/ 05 декабря 2018

Таким образом, способ вернуть метод 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);
0 голосов
/ 05 декабря 2018

сначала вам нужно создать регистрацию провайдера файлов.

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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...