我正在尝试使用HTTP Post发送byte[]
作为图像存储到MySQL数据库中,但它没有正确编码byte[]
或者我只是做了一些非常错误的事情。< / p>
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();
答案 0 :(得分:2)
使用.NET 4.5(您可以通过添加NuGet中的Microsoft.Net.Http包来使用.NET 4.0),可以更轻松地模拟表单请求。
以下是一个例子:
private System.IO.Stream Upload(string actionUrl, string paramString, Stream paramFileStream, byte [] paramFileBytes)
{
HttpContent stringContent = new StringContent(paramString);
HttpContent fileStreamContent = new StreamContent(paramFileStream);
HttpContent bytesContent = new ByteArrayContent(paramFileBytes);
using (var client = new HttpClient())
using (var formData = new MultipartFormDataContent())
{
formData.Add(stringContent, "param1", "param1");
formData.Add(fileStreamContent, "file1", "file1");
formData.Add(bytesContent, "file2", "file2");
var response = client.PostAsync(actionUrl, formData).Result;
if (!response.IsSuccessStatusCode)
{
return null;
}
return response.Content.ReadAsStreamAsync().Result;
}
}
答案 1 :(得分:2)
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"]);