[C#Web api发布图像作为表单数据

问题描述 投票:0回答:1

在邮递员中很容易做到:

“邮递员使用表单数据图像上传”

为了通过Web API实现它,我编写了以下代码:

HttpClient client = new HttpClient();
string url = "https://upload.*******.com/api/upload/photos";
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Clear();

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("multipart/form-data"));

byte[] data;
using (var br = new BinaryReader(inputPhotoUpload.files.OpenReadStream()))
data = br.ReadBytes((int) inputPhotoUpload.files.OpenReadStream().Length);

ByteArrayContent bytes = new ByteArrayContent(data);

MultipartFormDataContent multipartFormDataContent = new 
MultipartFormDataContent();
multipartFormDataContent.Add(new StringContent(inputPhotoUpload.watermark.ToString()), "watermark");
multipartFormDataContent.Add(new StringContent("listing"), "type");
multipartFormDataContent.Add(bytes, "files", inputPhotoUpload.files.FileName);

HttpResponseMessage res = await client.PostAsync(url, multipartFormDataContent);

我的InputPhotoUpload类

public class InputPhotoUpload
{
    public string watermark { get; set; }
    public string type { get; set; }
    public IFormFile files { get; set; }
}

上传服务器接受字节数组中的图像和其他两个名为listingwatermark的值。服务器给出代码500内部错误。我的目标是发布一个表单数据发布来上传图像,发布人可以做到,但我的控制器api无法发布。

c# asp.net-web-api multipartform-data form-data image-upload
1个回答
0
投票

显然,我需要将所有标头与邮递员同步,有些是不必要的。

 HttpClient client = new HttpClient();
                MultipartFormDataContent form = new MultipartFormDataContent();
                client.DefaultRequestHeaders.Clear();         

                ByteArrayContent bytes = new ByteArrayContent(imageStream);
                form.Add(bytes, "files", imageName);
                form.Add(new StringContent("En"), "watermark");
                form.Add(new StringContent("listing"), "type");


                HttpResponseMessage response = await client.PostAsync("https://upload.*****.com/api/upload/photos", form);
                var k = response.Content.ReadAsStringAsync().Result;

                _Result = JsonConvert.DeserializeObject<List<Output>>(k);
© www.soinside.com 2019 - 2024. All rights reserved.