How can I post image from UWP to .NET core web api?

谁都会走 提交于 2020-01-24 20:06:53

问题


Now I have configured for UWP photo post to web api part which is using HttpClient.

Uri uri = new Uri("http://localhost:50040/api/Upload");
IInputStream inputStream = await photoFile.OpenAsync(FileAccessMode.Read);
HttpMultipartFormDataContent multipartContent = new HttpMultipartFormDataContent();
multipartContent.Add(new HttpStreamContent(inputStream), "myFile", photoFile.Name);
Windows.Web.Http.HttpClient newclient = new Windows.Web.Http.HttpClient();
Windows.Web.Http.HttpResponseMessage response = await client.PostAsync(uri, multipartContent);

But I don't know how to set for the server side which is my .NET core web api to get the image which post from my UWP application.Please Help me, thank you.


回答1:


But I don't know how to set for the server side which is my .NET core web api

Please reference the File uploads official tutorial to create your server side. For example, add POST method as following sample code showed to receive the UWP client sent file with the client code you showed above.

// POST api/values
[HttpPost]
public async Task<IActionResult> Post(IFormFile myFile)
{
   // full path to file in temp location, you could change this
   var filePath = Path.GetTempFileName();
   if (myFile.Length > 0)
   {
       using (var stream = new FileStream(filePath, FileMode.Create))
       {
           await myFile.CopyToAsync(stream);
       }
   }
   // process uploaded files
   // Don't rely on or trust the FileName property without validation.
   return Ok(new { filePath, myFile.Length });
}

More details you could also reference the official sample.




回答2:


In Web API Controller

public IHostingEnvironment _environment;
public UploadFilesController(IHostingEnvironment environment) // Create Constructor 
{
    _environment = environment;
}

[HttpPost("UploadImages")]
public Task<ActionResult<string>> UploadImages([FromForm]List<IFormFile> allfiles)
{
    string filepath = "";
    foreach (var file in allfiles)
    {
        string extension = Path.GetExtension(file.FileName);
        var upload = Path.Combine(_environment.ContentRootPath, "ImageFolderName");
        if (!Directory.Exists(upload))
        {
            Directory.CreateDirectory(upload);
        }
        string FileName = Guid.NewGuid() + extension;
        if (file.Length > 0)
        {
            using (var fileStream = new FileStream(Path.Combine(upload, FileName), FileMode.Create))
            {
                file.CopyTo(fileStream);
            }
        }
        filepath = Path.Combine("ImageFolderName", FileName);
    }
    return Task.FromResult<ActionResult<string>>(filepath);
}

In yourpage.xaml.cs

using Windows.Storage;
using Windows.Storage.Pickers;
.....
StorageFile file;
......

private async void btnFileUpload_Click(object sender, RoutedEventArgs e) // Like Browse button 
{
    try
    {
        FileOpenPicker openPicker = new FileOpenPicker();
        openPicker.ViewMode = PickerViewMode.Thumbnail;
        openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
        openPicker.FileTypeFilter.Add(".jpg");
        openPicker.FileTypeFilter.Add(".png");
        file = await openPicker.PickSingleFileAsync();
        if (file != null)
        {
            //fetch file details
        }
    }
    catch (Exception ex)
    {

    }
}

//When upload file
var http = new HttpClient();
var formContent = new HttpMultipartFormDataContent();
var fileContent = new HttpStreamContent(await file.OpenReadAsync());
formContent.Add(fileContent, "allfiles", file.Name);
var response = await http.PostAsync(new Uri("Give API Path" + "UploadImages", formContent);
string filepath = Convert.ToString(response.Content); //Give path in which file is uploaded

Hope this code helps you...

But remember formContent.Add(fileContent, "allfiles", file.Name); line is important and allfiles is that name of parameter to fetch files in web api method "public Task<ActionResult<string>> UploadImages([FromForm]List<IFormFile> **allfiles**)"

Thanks!!!



来源:https://stackoverflow.com/questions/50127236/how-can-i-post-image-from-uwp-to-net-core-web-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!