【问题标题】:Put multiple Attachments to CouchDB将多个附件添加到 CouchDB
【发布时间】:2021-02-11 08:14:42
【问题描述】:

我有一个 .NET Core 控制台应用程序,它对我的​​ CouchDB 进行了一些更新。 现在我必须向我的文档添加多个附件(在本例中为图像)。

这里 (https://docs.couchdb.org/en/stable/api/document/common.html#attachments) 在第 1.4.1.1.4 点他们描述了这种方式,但我收到了错误的请求,我认为我的 json 并不完美。 所以我有一个我转换然后发送到数据库的图像列表,这是我的代码:

List<ImageFromApi> imagesFromApi = new List<ImageFromApi>();
            string base64String;
            foreach (var image in Images)
            {
                using (image)
                {
                    using (MemoryStream m = new MemoryStream())
                    {
                        image.Save(m, image.RawFormat);
                        byte[] imageBytes = m.ToArray();

                        // Convert byte[] to Base64 String
                        base64String = Convert.ToBase64String(imageBytes);
                    }
                }
                ImageFromApi Imagebuffer = new ImageFromApi() {
                    content_type = "image/*",
                    data = base64String                
                };
                imagesFromApi.Add(Imagebuffer);
                DocAttachments bufferData = new DocAttachments() {imagesFromApi = imagesFromApi };
                newImages._attachments = bufferData;
            }

            string imagesJson = JsonConvert.SerializeObject(newImages);
            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                streamWriter.Write(imagesJson);
            }
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

此代码中的我的 Json 如下所示:

我从文档中看到了我的和那个之间的区别,但我不知道如何正确更改我的 json。

有什么解决办法吗?

【问题讨论】:

  • 不是您唯一的问题,但image/* 是无效的内容类型。例如,您需要像 image/jpeg 这样的东西。
  • 我不懂 C#,所以无法准确告诉您如何在代码中解决此问题,但您的 _attachments 数据似乎是一个数组。 _attachments 应该是文件名到文件数据的映射。即{"_attachments":{"image1.jpg": {"content_type":"image/jpeg","data":"..."},"image2.jpg":{"content_type":"image/jpeg","data":"..."}}.
  • 是的,我知道这是问题所在,但我不知道如何解决。我正在四处寻找解决方案

标签: c# json couchdb


【解决方案1】:

所以没有人有解决方案,我尝试了一些方法并找到了实现我需要的方法。我制作了一个新附件并手动添加了每个图像。 这是第一张图片的示例:

Attachments attBuffer = new Attachments();

using (imagesFromApi[0])
            {
                using (MemoryStream m = new MemoryStream())
                {
                    partImgs[0].Save(m, partImgs[0].RawFormat);
                    byte[] imageBytes = m.ToArray();
                    // Convert byte[] to Base64 String
                    base64String = Convert.ToBase64String(imageBytes);
                }
            }

            attBuffer.Hood = new Hood()
            {
                content_type = "image/jpeg",
                data = base64String,
            };

如您所见,我将任何图像创建为一个类,然后将列表映射到它。我认为这不是最好的方法,但它对我有用,总比没有好。

希望对你也有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2012-05-28
    相关资源
    最近更新 更多