【问题标题】:Why base64 image is big ? xamarin forms为什么base64图像很大? xamarin 形式
【发布时间】:2017-09-06 17:53:38
【问题描述】:

当我尝试从用户图库中获取图片时,有时会遇到一个错误。 我在 Stream 对象中获取图片,将其转换为 base64,然后使用 post 函数发送它。 有时程序说图像路径很大,因此无法发送 url。 我听说这是导致图像大小的原因,但我不确定... 有人知道真正导致大 base64 字符串的原因吗?我该如何解决?

【问题讨论】:

  • 它是一种将 3 字节转换为 4 字节的编码格式。膨胀是预期的。您可能需要在客户端级别为您的图像实施某种程度的压缩 - 或更新您的在线 api 以部分接受较大的文件!比如接受多部分请求。

标签: xamarin xamarin.forms base64


【解决方案1】:

您可以按照类似的方式进行操作:

http://jamessdixon.wordpress.com/2013/10/01/handling-images-in-webapi/

也许你需要像这样在你的 web api 中做一些改变:

[HttpPost]
   public HttpResponseMessage UploadImage(int ID)
   {
       var result = new HttpResponseMessage(HttpStatusCode.OK);
       if (Request.Content.IsMimeMultipartContent())
       {
           Request.Content.LoadIntoBufferAsync().Wait();
           Request.Content.ReadAsMultipartAsync(new MultipartMemoryStreamProvider()).ContinueWith((task) =>
           {
               MultipartMemoryStreamProvider provider = task.Result;
               foreach (HttpContent content in provider.Contents)
               {
                  Stream stream = content.ReadAsStreamAsync().Result;
                  Image image = Image.FromStream(stream);
                  var testName = content.Headers.ContentDisposition.Name;
                  String filePath = HostingEnvironment.MapPath("~/Content/");
                  String fullPath = Path.Combine(filePath, ID.ToString()+".jpg");
                  image.Save(fullPath);
               }
           });
          return result;
       }
       else
       {
           throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted"));
       }

   }

确保您的 api 网络运行良好后,您应该将 Stream 更改为 byte[]

在你的 Xamarin 代码中试试这个:

  public async Task PostItem(String Controller, String Method, int ID, byte[] item) 
  {
      using (var client = CreateClient ()) {
      var da = new ByteArrayContent(item);

        try{
            var multi = new MultipartContent();
            multi.Add(da);
            var response = await client.PostAsync (Controller + "/" +Method + "/?ID=" +ID, multi);
        }catch(Exception ex)
        {
           Console.Write(ex.Message);
        }
    }
}

更多信息见MultipartContent类文档

【讨论】:

    猜你喜欢
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多