У меня есть приложение, написанное с использованием c # в верхней части фреймворка Asp.Net MVC 5.
Моя цель - позвонить в стороннюю службу для загрузки волнового файла.Затем я хочу конвертировать этот файл в mp3.Наконец, я хочу вернуть mp3-файл как (byte []), чтобы позволить пользователю загружать его непосредственно из памяти.
Вот как мой код закончится, что позволит пользователю загружать преобразованный файл изпамять
public ActionResult Download(int? id)
{
// Download and convert the file
// the variable "someUri" is generated based on the provided id value
byte[] filedata = ConvertToMp3(someUri);
var cd = new System.Net.Mime.ContentDisposition
{
FileName = "filename.mp3",
Inline = true,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(filedata, "audio/mpeg");
}
Но у меня возникла проблема с методом ConvertToMp3
.
Я использую библиотеку NAudio для преобразования файлов.Вот мой код до сих пор
public void ConvertToMp3(Uri uri)
{
using (var client = new WebClient())
{
byte[] file = client.DownloadData(uri);
string wavFileFullName = GetFullDirectory() + "filename.wav";
string mp3FileFullName = GetFullDirectory() + "filename.mp3";
WaveFormat target = new WaveFormat(8000, 16, 1);
using (WaveStream stream = new WaveFileReader(new MemoryStream(file)))
using (WaveFormatConversionStream str = new WaveFormatConversionStream(target, stream))
{
WaveFileWriter.CreateWaveFile(wavFileFullName, str);
using (var reader = new WaveFileReader(wavFileFullName))
using (var writer = new LameMP3FileWriter(mp3FileFullName, reader.WaveFormat, bitRate))
{
reader.CopyTo(writer);
}
}
File.Delete(wavFileFullName);
}
}
Приведенный выше метод преобразует файл.Но этот метод записывает волновой файл на рабочий стол, преобразует его в mp3 и затем удаляет волновой файл.Кроме того, этот метод записывает mp3-файл на рабочий стол, а не возвращает содержимое byte[]
.
Как преобразовать файл в память без необходимости записи на рабочий стол?Кроме того, как я могу конвертировать mp3 файл в byte[]
?