c# - PHP - byte[] 到 Blob

标签 c# php xamarin

我正在尝试使用 HTTP Post 发送一个 byte[] 作为图像存储到 MySQL 数据库中,但它没有正确编码 byte[] 或者我只是在做一些非常错误的事情。

C#代码

public async Task<string> Post (byte[] image)
    {
        string data = data = string.Format ("METHOD=post&Image={0}", image);

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

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

        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);
            /*if (img != null)
                await stream.WriteAsync (img, 0, img.Length);*/
            //^ Didn't seme to work. 
        }

        return request;
    }

PHP 代码

$null = NULL;
        $stmt = $this->db->prepare("INSERT INTO Posts (Image) VALUES (?)");
        $stmt->bind_param("b", $_POST["Image"]);
        $stmt->execute();
        $stmt->close();

最佳答案

string.Format("METHOD=post&Image={0}", image);

会产生类似的东西:

METHOD=post&Image=System.Byte[]

所以实际上不会发送任何有用的东西。

您可以使用 Base64 encoding如果你想发布二进制数据:

String base64 = System.Convert.ToBase64String(image)
string.Format("METHOD=post&Image={0}", base64 );

我不确定在 PHP 中如何完成反向操作,但我认为它是使用 base64_decode 的东西:

$base64Image = base64_decode($_POST["Image"]);

关于c# - PHP - byte[] 到 Blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25351662/

相关文章:

listview - Xamarin.Forms:获取 ListView 的所有单元格/项目

c# - winforms中ListView的子项不显示

c# - 将小型 C# 校验和程序转换为 Java

c# - 按钮边框在 XAML/C# 中被切断

javascript - 使用siblings().map(function()的复选框函数需要转换为php数组

php - Laravel 4.2 查询错误 - 当其他无缓冲查询处于事件状态时无法执行查询

php - ajax 和 PHP 错误 "Undefined index"

c# - Xamarin 和 .NET Standard 2 库问题

c# - 以编程方式发现服务主机服务类型

c# - 如何使用 Xamarin.Forms 将导航按钮添加到主详细信息页面的标题