如何将图像从UWP发布到.NET核心web api?

时间:2018-05-02 04:36:50

标签: c# .net uwp http-post asp.net-core-webapi

现在我已经为使用HttpClient的web api部分配置了UWP照片帖。

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);

但是我不知道如何设置服务器端是我的.NET核心web api来获取我的UWP应用程序发布的图像。请帮助我,谢谢。

2 个答案:

答案 0 :(得分:0)

  

但我不知道如何设置服务器端,这是我的.NET核心web api

请参考File uploads official tutorial以创建服务器端。例如,添加POST方法,如以下示例代码所示,以接收UWP客户端发送的文件以及上面显示的客户端代码。

// 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 });
}

您还可以参考official sample

了解更多细节

答案 1 :(得分:0)

在Web API控制器中

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);
}

在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

希望此代码可以帮助您...

但是请记住,formContent.Add(fileContent, "allfiles", file.Name);行很重要,而allfiles是在Web api方法"public Task<ActionResult<string>> UploadImages([FromForm]List<IFormFile> **allfiles**)"中获取文件的参数名称

谢谢!