接收二进制 wav 音频文件的 GET 请求

GET request that receives a binary wav audio file

我正在尝试发出 Twilio GET 请求以从以下 url 检索 wav 文件:https://api.twilio.com/2010-04-01/Accounts/accntsid/Recordings/pathsid.wav

我当前的代码是:

public string Get(string url)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        using (Stream stream = response.GetResponseStream())
        using (StreamReader reader = new StreamReader(stream))
        {

            return reader.ReadToEnd();
        }
    }

然而,这个 returns "RIFF??" 其中 "?" 代表一些奇怪的特殊字符。所以我显然没有正确阅读流。根据 API 文档,带有 ".wav" 扩展名的二进制 WAV 音频文件返回 mime 类型 "audio/x-wav"。我需要设置一个字节数组吗?目的是将这个 .wav 转换成 base64 字符串。

干杯

是的,您不应该对二进制数据使用 StreamReader,您需要将其作为 byte 数组处理,即:

public byte[] Get(string url)
{
    var request = (HttpWebRequest)WebRequest.Create(url);

    using (var response = (HttpWebResponse)request.GetResponse())
    using (var stream = response.GetResponseStream())
    using (var memoryStream = new MemoryStream())
    {
        stream.CopyTo(memoryStream);
        return memoryStream.ToArray();
    }
}

对于这种情况,HttpWebRequest 不是必需的,您可以只使用 WebClient.DownloadData 来避免所有 stream 处理,即

public byte[] Get(string url)
{        
    using (var client = new WebClient())
    {
        return client.DownloadData(url);
    }
}

请阅读你的最后一句话 - 如果你想要 base64,你可以在 byte 数组

上调用 Convert.ToBase64String
public string Get(string url)
{        
    using (var client = new WebClient())
    {
        return Convert.ToBase64String(client.DownloadData(url));
    }
}