【问题标题】:Saving a base 64 encoded image in MongoDB GridFS在 MongoDB GridFS 中保存 base 64 编码图像
【发布时间】:2014-02-16 04:34:34
【问题描述】:

我有一个 Web 服务,它获取画布标记的内容并将其保存到 MongoDB GridFS 存储中。

下面的代码可以工作,但是它需要在将图像发送到 MongoDB 之前将其保存到磁盘。

    Using postBody As Stream = Request.InputStream
        ' Get the body of the HTTP POST (the data:image/png)
        postBody.Seek(0, SeekOrigin.Begin)
        Dim imageData As String = New StreamReader(postBody).ReadToEnd

        Dim base64Data = Regex.Match(imageData, "data:image/(?<type>.+?),(?<data>.+)").Groups("data").Value
        Dim data As Byte() = Convert.FromBase64String(base64Data)

        Using stream = New MemoryStream(data, 0, data.Length)
            Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(stream)

            Dim directory = Server.MapPath("~/App_Data/temp/")
            Dim file = String.Concat(directory, id, ".png")
            img.Save(file, System.Drawing.Imaging.ImageFormat.Png)

            Using fs = New FileStream(file, FileMode.Open)
                db.GridFS.Upload(fs, id & ".png")
            End Using

        End Using
    End Using

有没有更好的方法,可能不需要在上传到 MongoDB 之前将其持久化到磁盘?

【问题讨论】:

  • 为什么不直接将内存流传递给它,将Position 设置回0

标签: vb.net mongodb base64 gridfs


【解决方案1】:

按照 cmets 中的建议,只需使用 Stream 作为 Upload 的参数,而不是写入文件。

还请注意,您不必转换为 base64 以通过 GridFS(或就此而言的普通 mongo 字段)发送文件。输入可以是二进制的,除非您当然总是为了方便起见希望对数据库进行 base64 编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-16
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多