【问题标题】:How can I save a captured picture from the user to the cosmos db in xamarin forms?如何以 xamarin 形式将用户捕获的图片保存到 cosmos db?
【发布时间】:2020-06-07 10:01:20
【问题描述】:

假设我允许用户使用他的相机拍摄照片或从图库中挑选一张照片。 我在模型中有一个名为图片的属性,它应该具有图像的路径。 如何将此图像保存到数据库并将其路径保存在属性中?

【问题讨论】:

  • 您必须将数据序列化为字符串,以便它可以成为 json 文档的一部分。您可以将图像转换为 Base64 编码,但这是对 Cosmos 的误用,不会很好地索引。由于您显然已经在 Azure 中,因此您应该将图像存储在 Azure Blob Storage 中,并将对它们的引用放在您的 Cosmos 文档中。
  • 您可以将图像文件作为字节数组存储到数据库中。你是如何挑选或捕捉照片的?您可以使用 Xam.Plugin.Media 插件来实现该功能。该库提供了 MediaFile.Path 和 GetStream 方法,可以帮助保存图片。

标签: c# xaml xamarin xamarin.forms


【解决方案1】:

最简单的方法是使用 Azure Blob Storage 之类的服务,您可以查看详细信息 here。但最终,您只需将图像转换为字节,然后将其上传以获取 URL:

byte[] byteData = Convert.ToByteArray(image);
var uploadedFilename = await AzureStorage.UploadFileAsync(ContainerType.Image, new MemoryStream(byteData));

另一种成本较低的方法是创建您自己的服务器并拥有一个网络服务,使您能够将图片上传到它,并返回您上传的图片的 URL。

【讨论】:

    【解决方案2】:

    如何将此图像保存到数据库并将其路径保存在属性中?

    您可以将图像文件作为字节数组存储到数据库中。你是如何挑选或捕捉照片的?您可以使用Xam.Plugin.Media plugin 来实现该功能。该库提供了相关的方法,可以帮助轻松保存图片。

    从图库中挑选照片后,尝试使用MediaFile.Path命令获取图像文件的路径。您可以使用GetStream()方法获取流并将流转换为字节数组。然后将 byte[] 和路径字符串存入数据库。

    var image_file = await Plugin.Media.CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions() { });
    var Image_stream = image_file.GetStream();
    image_file.Dispose();
    
    //convert the image stream to byte array
    private byte[] GetImageBytes(Stream stream)
    {
        byte[] ImageBytes;
        using (var memoryStream = new System.IO.MemoryStream())
        {
            stream.CopyTo(memoryStream);
            ImageBytes = memoryStream.ToArray();
        }
        return ImageBytes;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-19
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      相关资源
      最近更新 更多