【问题标题】:GET request that receives a binary wav audio file接收二进制 wav 音频文件的 GET 请求
【发布时间】:2018-12-19 17:55:23
【问题描述】:

我正在尝试发出 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();
        }
    }

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

干杯

【问题讨论】:

    标签: get base64 twilio wav twilio-api


    【解决方案1】:

    是的,您不应该将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));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多