【问题标题】:Memory Stream Inserting image into DB内存流将图像插入数据库
【发布时间】:2011-05-27 09:25:00
【问题描述】:

我需要你的帮助来解决这个问题。

我正在尝试将这张图片 alb.picture 插入到 DB 中。要使用MemoryStream,我是否错过了一些在这里阅读的内容。

代码不会返回任何错误,但它只是插入 0X00000 并检索 (select * ....),它在网格中显示一个空白。其余的字段,created_date 和 @987654324 @ 在网格显示期间很好。

foreach (Album alb in albms.data)
{
    alb.picture = "https://graph.facebook.com/" + alb.id + 
        "/picture/?access_token=" + Token;

    MemoryStream ms = new MemoryStream(1000);
    string sfn = alb.picture;

    m_lImageFileLength = alb.picture.Length;
    m_barrImg = new Byte[Convert.ToInt32(m_lImageFileLength)];

    ms.Read(m_barrImg, 0, (int)m_lImageFileLength);
    objBLL.insert_FacebookPhotos(Convert.ToInt64(ui.id), m_barrImg, 
       alb.created_time.ToString(), alb.updated_time.ToString());


}

非常感谢
SC

【问题讨论】:

  • 您正在(空)MemoryStream 读取到(空)新byte[])。实际数据在哪里?
  • 还有;在第一行中,您将string 分配给alb.picture;然后稍后您似乎将此 stringLength 流式传输为数据的大小(请参阅:m_lImageFileLength = alb.picture.Length;)。再说一遍:实际数据在哪里?
  • 您实际上并没有从服务器读取图像。通读你的代码并在纸上“运行”,写下每一行在做什么,你会看到你失败的地方。然后查看 HTTPWebRequest 和 HTTPWebResponse 对象来弥补差距。

标签: c# sql-server


【解决方案1】:

您正在从一个空的 MemoryStream 写入。首先,您可能希望在实例化它时删除 1000 容量。

MemoryStream ms = new MemoryStream();

看起来实际的流在alb.picture 中。根据此对象的类型,您可能需要先将其转换为byte[]。然后将byte[](而不是读取)写入到 MemoryStream ms:

ms.Write(b, 0, b.Length); // where b is your byte[]

根据您正在处理的对象类型,有多种方法可以转换为byte[]

或者,如果文件是HttpPostedFileBase,您可以通过其属性InputStream 直接访问Stream

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多