繁体   English   中英

在图像字节数组中添加了错误的文件扩展名

[英]Wrong file extension added in image byte array

我有一种方法可以获取基于 Web 的图像,将其转换为字节数组,然后将其作为图像传递给 CDN。

我现在已经成功使用了数百次,但是在迁移一组特定的图像时,我注意到这些 Jpeg 文件被识别为.png 文件,当它们到达 CDN 时是空白的。

使用我从 web 复制的一些代码,我能够在构建后从图像字节数组中识别文件扩展名。

因此,从原始图像到字节数组的转换神秘地更新了文件类型。

这是我的方法:-

public byte[] Get(string fullPath)
{
  byte[] imageBytes = { };
  var imageRequest = (HttpWebRequest)WebRequest.Create(fullPath);
  var imageResponse = imageRequest.GetResponse();

  var responseStream = imageResponse.GetResponseStream();

  if (responseStream != null)
  {
    using (var br = new BinaryReader(responseStream))
    {
      imageBytes = br.ReadBytes(500000);
      br.Close();
    }
    responseStream.Close();
   }
            
   imageResponse.Close();
   return imageBytes;
}

我也尝试过将其转换为使用 MemoryStream。

我不确定我还能做些什么来确保它识别正确的文件类型。

到目前为止,该代码仅读取每个文件 500,000 个字节。 如果文件大于该文件,则结尾被截断并且内容不再有效。 为了读取所有字节,您可以使用以下代码:

public byte[] Get(string fullPath)
{
  List<byte> imageBytes = new List<byte>(500000);
  var imageRequest = (HttpWebRequest)WebRequest.Create(fullPath);
  using (var imageResponse = imageRequest.GetResponse())
  {
    using (var responseStream = imageResponse.GetResponseStream())
    {
      using (var br = new BinaryReader(responseStream))
      {
        var buffer = new byte[500000];
        int bytesRead;
        while ((bytesRead = br.Read(buffer, 0, buffer.length)) > 0)
        {
          imageBytes.AddRange(buffer);
        }
      }
    }
  }
  return imageBytes.ToArray();
}

上面的示例以 500,000 字节的块读取数据 - 对于您的大多数文件,这应该足够了。 如果文件更大,代码会读取更多块,直到没有更多字节要读取。 所有的块都组装在一个列表中。

这断言所有字节都被读取,即使内容大于 500,000 字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM