一個PNG總是以0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A
字節開頭。
因此,您可以檢查文件的第一個字節和擴展名。
在API上,您應該評論您的代碼並使用好的方法名稱來防止錯誤。您可以從ImageToBinary
到PngImageToBinary
改變你的方法名稱...
public static readonly byte[] PngSignature = { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A };
/// <summary>
/// Convert a PNG from file path to byte array.
/// </summary>
/// <param name="imagePath">A relative or absolute path for the png file that need to be convert to byte array.</param>
/// <returns>A byte array representation on the png file.</returns>
public static byte[] PngImageToBinary(string imagePath)
{
if (!File.Exists(imagePath)) // Check file exist
throw new FileNotFoundException("File not found", imagePath);
if (Path.GetExtension(imagePath)?.ToLower() != ".png") // Check file extension
throw new ArgumentOutOfRangeException(imagePath, "Requiere a png extension");
// Read stream
byte[] b;
using (var fS = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
{
b = new byte[fS.Length];
fS.Read(b, 0, (int)fS.Length);
fS.Close();
}
// Check first bytes of file, a png start with "PngSignature" bytes
if (b == null
|| b.Length < PngSignature.Length
|| PngSignature.Where((t, i) => b[i] != t).Any())
throw new IOException($"{imagePath} is corrupted");
return b;
}
ImageToBinary功能在Web API中用來生成將發送到其它應用程序中的byte [],所以我一直在尋找一種方法,我可以確保在其他應用程序中收到字節[]時,不能將其轉換爲任何其他格式,只能使用PNG格式。 – Dineesh