.net core 2.0 webapi从winform应用程序上传照片

时间:2018-02-01 06:12:39

标签: c# .net rest asp.net-web-api core

我有两个项目。一个是Windows窗体项目,另一个是.Net Core 2.0 Web API项目。我可以从Windows窗体应用程序调用我的Web API,我可以调用基本的CRUD操作。

我需要张贴一张照片。我怎么做?我的POST看起来像这样:

private async void AddStudent()
{
    var p = new Student
    {
        FirstName = "Johdn",
        LastName = "Doe",
        Avatar = "Image"; // my photo
    };

    using (var client = new HttpClient())
    {
        var serializedStudent = JsonConvert.SerializeObject(p);
        var content = new StringContent(serializedStudent, Encoding.UTF8, "application/json");
        var result = await client.PostAsync(URI, content);
    }
}

Web API实现如下所示:

public void Post([FromBody] Student student)
{
    var insideStudent = _dbContext.Students.FirstOrDefault(cus => cus.Id == student.Id);
    if (insideStudent != null)
    {
        insideStudent.FirstName = student.FirstName;
        insideStudent.LastName = student.LastName;
        _dbContext.SaveChanges();
    } else {
        _dbContext.Students.Add(new Student
        {
            FirstName = student.FirstName,
            LastName = student.LastName,
            Avatar = student.Avatar // my photo
        });
        _dbContext.SaveChanges();
    }
}

但是如何将图像发送到我的Web API?

1 个答案:

答案 0 :(得分:1)

val b=sc.broadcast(myLargeDataObj) val c=x.map {(r:org.apache.spark.sql.Row) => b.value.getDataFromMyLargeDataObj(r.getLong(0))} .collect 可以是一个选项。鉴于MultipartFormDataContent是一个字节数组:

Student.Avatar

并且您拥有图像的public byte[] Avatar { get; set; } ,您可以将其作为字节数组内容与字符串内容一起发送:

stream

那么你可以在服务器端接收那些:

    private async void AddStudent()
    {
        var stream = //gets image stream...
        var p = new Student
        {
            FirstName = "Johdn",
            LastName = "Doe",
        };
        using (var client = new HttpClient())
        {
            var serializedStudent = JsonConvert.SerializeObject(p);
            var stringContent = new StringContent(serializedStudent, Encoding.UTF8, "application/json");
            var multipartContent = new MultipartFormDataContent();
            using (var mem = new MemoryStream())
            {
                await stream.CopyToAsync(mem);
                var byteContent = new ByteArrayContent(mem.ToArray());
                multipartContent.Add(byteContent, "files", "my file");
                multipartContent.Add(new StringContent(p.FirstName), "FirstName");
                multipartContent.Add(new StringContent(p.LastName), "LastName");
                var response = await client.PostAsync(URI, multipartContent);
            }
        }
    }