【问题标题】:Convert Image to byte array and pass it to web api to save image on server将图像转换为字节数组并将其传递给 web api 以将图像保存在服务器上
【发布时间】:2016-10-01 09:54:35
【问题描述】:

我想将图像转换为字节数组并将其传递给 web api 以将图像保存在服务器上并将图像名称保存在数据库中。

我已经完成了以下代码,但是当我使用此块时,参数无效出现异常 -

byte[] param contains byte array value of image from request url
     using (var ms = new System.IO.MemoryStream(param))
                    {
                        var cd= Image.FromStream(ms);
     //...
                    }

 using (var ms = new System.IO.MemoryStream(param))
                    {
                        var Image= Image.FromStream(ms);
     //...
                    }

我已经尝试了我在搜索中找到的解决方案,但出现了同样的错误。

谁能帮我解决这个错误。

【问题讨论】:

  • Image.FromStream 是从流中创建图像
  • 是的,我正在尝试这样做,但它会引发上述异常。
  • 检查参数中的字节数以确保大小没有从源代码改变。 FromStream 方法检查图像以确保它有效,并且当字节数组不包含有效图像时将给出异常。通常,当我解决此类问题时,我会发现大小发生变化的地方以找到问题的根本原因。

标签: c# asp.net-web-api


【解决方案1】:

这完全取决于param 的真正含义:

  1. 原始像素数据?

    您应该阅读this answer

  2. 图像文件?

    您的代码应该可以工作。您得到的错误可能是由于事实并非如此。

  3. 序列化图像?

    在这种情况下,您需要使用Binary 格式化程序。您可以在 System.Runtime.Serialization.Formatters.Binary 命名空间中找到一个。

    要从byte[] 缓冲区获取图像,您需要执行以下操作:

    Image deserializedImage = null;
    
    using (var memoryStream = new MemoryStream(bytes, false))
    {
        deserializedImage = (Image)formatter.Deserialize(memoryStream);
    }
    

如果这些选项都不起作用,那么您需要调查param 究竟是如何生成的以及它包含的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多