在MongoDB GridFS中保存base 64编码的图像

问题描述 投票:0回答:2

我有一个Web服务,它接受canvas标记的内容并将其保存到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之前将其持久化到磁盘上?

vb.net mongodb base64 gridfs
2个回答
0
投票

如注释中所建议,只需将Stream用作Upload的参数,而不要写出到文件中。

并且还要注意,您不必转换为base64以便通过GridFS(或与此相关的纯mongo字段)发送文件。输入可以是二进制的,除非您当然<>为了方便起见希望对base64进行编码。


0
投票
[我建议使用我的模块“ mongo-image-converter”轻松地将它们转换为可上传到mongodb的文件,有关更多详细信息,请关注此Github存储库:
© www.soinside.com 2019 - 2024. All rights reserved.