[使用c#从CouchDB获取大二进制数据

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

我使用CouchDB作为内容服务器来存储图像和大视频文件问题是当我检索这些文件时,它表示为文档响应,需要反序列化以获取二进制文件,这将导致内存不足错误(对于大于300mb的任何文件)。

这里是上传功能

  public async Task<string> InsertDataToCouchDb(string dbName, string id, string recodNo, string filename, byte[] image)
    {
        var connection = System.Configuration.ConfigurationManager.ConnectionStrings["CouchDb"].ConnectionString;
        using (var db = new MyCouchClient(connection, dbName))
        {

            // HERE I NEED TO UPLOAD MY IMAGE BYTE[] AS CHUNKS 
            var artist = new couchdb
            {
                _id = id,
                filename = filename,
                Image = image
            };

            var response = await db.Entities.PutAsync(artist);
            return  response.Content._id;
        }

    }

下载功能

   public async Task<byte[]> FetchDataFromCouchDb(string dbName, string id)
    {
        var connection = System.Configuration.ConfigurationManager.ConnectionStrings["CouchDb"].ConnectionString;
        using (var db = new MyCouchClient(connection, dbName))
        {
            //HERE I NEED TO RETRIVE MY FULL IMAGE[] FROM CHUNKS
            var test = await db.Documents.GetAsync(id, null);

            var doc = db.Serializer.Deserialize<couchdb>(test.Content);
            return doc.Image;

        }
    }

我需要直接获得二进制数据,而不会像mongoDB GridFSBucket那样进行任何反序列化

谢谢

c# couchdb
1个回答
0
投票
您使用错误的方式,必须使用附件对象将附件与文档分开。

var response = await db.Entities.PutAsync(artist);//The document var request = new PutAttachmentRequest( id, response.Rev,//from the added document "filename", HttpContentTypes.Text, filebytes); var xxx = await db.Attachments.PutAsync(request);

//在这里您可以阅读文件                    AttachmentResponse resAtt =等待db.Attachments.GetAsync(id,“ filename”);

var filebytes2 = resAtt.Content;//no deserialize

© www.soinside.com 2019 - 2024. All rights reserved.