c# - 修复这不是一个有效的位图文件
问题描述
string sDir = @"\\Q1875G\Vehicle";
NetworkCredential NCredentials = new NetworkCredential("FOLDER_ACCESS_USER", "Welcome@2020");
using (new NetworkConnection(sDir, NCredentials))
{
string path = $"{sDir}\\483";
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
string fileName = "add_274400.jpg";
path = $"{sDir}\\483\\{fileName}";
byte[] byteArrayIn = imageByteArray;
using (var ms = new MemoryStream(byteArrayIn))
{
using (var fs = new FileStream(path, FileMode.Create))
{
ms.WriteTo(fs);
}
}
}
使用此代码图像文件被创建,但当我尝试打开它时,它会给出一个错误,即这不是一个有效的位图文件,或者它的格式当前不受支持。
解决方案
那还不是JPEG;它是 jpeg 的字节,经过 base64 编码,并以标头为前缀,使其适合将内联插入<img src=
标签属性
jpeg 数据以 the 开头,/9j
因此您必须执行以下操作:
var b64jpeg = Encoding.ASCII.GetString(imageByteArray, 23, imageByteArray.Length - 23);
var jpegBytes = Convert.FromBase64String(b64jpeg);
然后写入jpegBytes
文件。不需要先放到 MemoryStream 中;只是File.WriteAllBytes
它
如果这imageByteArray
已作为字符串传递给您(在问题中可见的代码之外),最好将其保留为字符串并将其子字符串化,而不是让这个“到数组(在其他代码中),从数组(在此代码)”步骤
旁注:您也不需要if (!Directory.Exists(path))
;Directory.CreateDirectory
如果目录存在则不执行任何操作,因此无需Exists
检查即可调用它
推荐阅读
- postgresql - 在特定容器启动并运行后启动容器
- android - v.92 over HD Voice(通过 VoLTE)
- sql - SQL Server:检查日期的有效性
- excel - 如何查看数组中的项目
- javascript - Node.js、Express.js、输入意外结束
- python - 在特定公差内使用 pandas groupby
- python - 使用python以圆形方式裁剪图像
- r - 更改工作目录以使用 RStudio 中 Markdown 文档中的 ImageMagick 命令
- android - 在android studio中导入png图像
- angular - 刷新服务中的数据