【问题标题】:Base64 String HTTP PostBase64 字符串 HTTP 发布
【发布时间】:2014-08-19 01:10:45
【问题描述】:

这是我最后两个问题基本上合并为一个。
我正在使用带有 PHP HTTP Post 后端的 MonoTouch (C#) 在 Xamarin Studio for iOS 中构建一个应用程序。

在添加允许用户上传自己的图像的功能时,我将图像对象转换为 Base64 字符串以保存在 PHP 中。

过程:
UIImage -> NSData -> byte[] -> Base64 String -> HTTP Post -> Decode Base64 string -> imagecreatefromstring -> imagejpeg 保存在 PHP

这是我在 C# 中使用的源代码

public async void Post (string UID, string imageBase = null)
    {
        string data = "";
        if (imageBase != null) {
            data = string.Format ("METHOD=post&UID={0}&Image={1}", UID, imageBase);
        }

        HttpWebRequest r = await Info.createRequest (data);
        using (var resp = await Task.Factory.FromAsync<WebResponse> (r.BeginGetResponse, r.EndGetResponse, null)) {
            return;
        }
    }

public static async Task<HttpWebRequest> createRequest (string json)
    {
        (new CancellationTokenSource ()).Dispose ();
        var request = WebRequest.Create (BaseUrl) as HttpWebRequest; 
        request.Method = "POST";    
        request.ContentType = "application/x-www-form-urlencoded";

        byte[] postData = Encoding.UTF8.GetBytes (json);
        using (var stream = await Task.Factory.FromAsync<Stream> (request.BeginGetRequestStream, request.EndGetRequestStream, request)) {
            await stream.WriteAsync (postData, 0, postData.Length);
        }

        return request;
    }

这是我在 PHP 中使用的源代码

imagejpeg(imagecreatefromstring(base64_decode($_POST["Image"], TRUE)), "Users/Images/".$_POST["UID"]."/".md5(uniqid()).".png");

当我从 C# 代码中获取 imageBase 字符串并将其手动粘贴到 PHP 代码中以替换 $_POST["Image"] 时,一切正常。但它目前通过损坏的图像流发送,我只能想象这是因为 postData 是使用 UTF8 编码的,当它在服务器端解码时,我目前没有处理,它没有正确解码。

我打算尝试使用纯文本/文本 HTTP Post,但这似乎没有帮助,因为它让事情变得更糟。

【问题讨论】:

  • 你实际上在哪里对字符串进行Base64Encode?​​span>
  • @alstonp baseImage = this.image.AsJPEG (0.23f).GetBase64EncodedString (NSDataBase64EncodingOptions.SixtyFourCharacterLineLength); 它的编码方式应该没问题,在它编码之后,我复制了编码的字符串并将其粘贴到实际的 PHP 代码中,而不是使用 $_POST["Image"] 和效果很好

标签: c# php ios xamarin http-post


【解决方案1】:

已通过对 baseImage 字符串使用 WebUtility.UrlEncode 进行修复。

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多