[英]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.