Base64 String HTTP Post

本文关键字:Post HTTP String Base64 | 更新日期: 2023-09-27 18:18:30

这是我最后的两个问题。
我正在构建一个应用程序在Xamarin工作室的iOS使用MonoTouch (c#)与PHP HTTP Post后端。

在添加允许用户上传自己的图像的特性时,我必须将图像对象转换为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,但这似乎没有帮助,它使事情变得更糟。

Base64 String HTTP Post

使用WebUtility修复。在baseImage字符串上的UrlEncode。