【发布时间】: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