通过 POST 发送图片未正确发送
Sending Image by POST not sending it correctly
我必须将图像发送到我无法控制的 API,以便它可以进行一些人脸识别工作。似乎我发送了图像,但我认为它没有以正确的方式完成,因为 API 响应说图像不是 JPEG 文件。任何人都可以告诉我,如果我做错了??。我正在使用 Xamarin HttpClient Mono 实现:
MultipartFormDataContent content = new MultipartFormDataContent();
content.Headers.Add("X-Auth-Token", "eb27c17f-8bd6-4b94-bc4f-742e361b4e6a");
var imageContent = new ByteArrayContent(ultimaImagen);
content.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
content.Add(imageContent, "image", "image.jpg");
try
{
HttpResponseMessage response = await _client.PostAsync("https://10.54.66.160:9000/3/matching/search?list_id=3c9f2623-28be-435f-a49f-4dc29c186809&limit=1", content);
string responseContent = await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
throw;
}
这是 API 响应:
{
"detail": "Failed to decode image data. Detail: Not a JPEG file: starts with 0x2d 0x2d",
"error_code": 3001
}
最后,我发现了导致问题的原因。没有必要发送 MultipartFormDataContent
。只有 ByteArrayContent
工作得很好。这是工作代码:
private async void btnVerificar_Clicked(object sender, EventArgs e)
{
var imageContent = new ByteArrayContent(ultimaImagen);
imageContent.Headers.Add("X-Auth-Token", "eb27c17f-8bd6-4b94-bc4f-742e361b4e6a");
imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
try
{
HttpResponseMessage response = await _client.PostAsync("https://10.54.66.160:9000/3/matching/search?list_id=3c9f2623-28be-435f-a49f-4dc29c186809&limit=1", imageContent);
string responseContent = await response.Content.ReadAsStringAsync();
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
await DisplayAlert("MobileAccessControl", responseContent, "OK");
}
else
{
await DisplayAlert("MobileAccessControl", "Read not OK.", "OK");
}
}
catch (Exception ex)
{
throw;
}
}
我必须将图像发送到我无法控制的 API,以便它可以进行一些人脸识别工作。似乎我发送了图像,但我认为它没有以正确的方式完成,因为 API 响应说图像不是 JPEG 文件。任何人都可以告诉我,如果我做错了??。我正在使用 Xamarin HttpClient Mono 实现:
MultipartFormDataContent content = new MultipartFormDataContent();
content.Headers.Add("X-Auth-Token", "eb27c17f-8bd6-4b94-bc4f-742e361b4e6a");
var imageContent = new ByteArrayContent(ultimaImagen);
content.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
content.Add(imageContent, "image", "image.jpg");
try
{
HttpResponseMessage response = await _client.PostAsync("https://10.54.66.160:9000/3/matching/search?list_id=3c9f2623-28be-435f-a49f-4dc29c186809&limit=1", content);
string responseContent = await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
throw;
}
这是 API 响应:
{
"detail": "Failed to decode image data. Detail: Not a JPEG file: starts with 0x2d 0x2d",
"error_code": 3001
}
最后,我发现了导致问题的原因。没有必要发送 MultipartFormDataContent
。只有 ByteArrayContent
工作得很好。这是工作代码:
private async void btnVerificar_Clicked(object sender, EventArgs e)
{
var imageContent = new ByteArrayContent(ultimaImagen);
imageContent.Headers.Add("X-Auth-Token", "eb27c17f-8bd6-4b94-bc4f-742e361b4e6a");
imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
try
{
HttpResponseMessage response = await _client.PostAsync("https://10.54.66.160:9000/3/matching/search?list_id=3c9f2623-28be-435f-a49f-4dc29c186809&limit=1", imageContent);
string responseContent = await response.Content.ReadAsStringAsync();
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
await DisplayAlert("MobileAccessControl", responseContent, "OK");
}
else
{
await DisplayAlert("MobileAccessControl", "Read not OK.", "OK");
}
}
catch (Exception ex)
{
throw;
}
}