我使用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那样进行任何反序列化
谢谢
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