首页 > 解决方案 > 修复这不是一个有效的位图文件

问题描述

在此处输入图像描述

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);
                                }
                            }
                    }

使用此代码图像文件被创建,但当我尝试打开它时,它会给出一个错误,即这不是一个有效的位图文件,或者它的格式当前不受支持。

标签: c#

解决方案


那还不是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检查即可调用它


推荐阅读