如何从xamarin表单应用程序上传图像到服务器

时间:2018-04-08 19:31:52

标签: c# asp.net-mvc xamarin asp.net-core xamarin.forms

我尝试使用发布请求将我的xamarin表单应用程序中的图像发送到asp .net核心服务器。我需要将图像保存在某个服务器文件夹中,但我不能这样做。

这是在_mediaFile

中选择图像后发送图像的方法
    private async void UploadFile_Clicked(object sender, EventArgs e)
    {
        var uri = new Uri(string.Format(Constants.UsersRestUrl + "/Files/Upload/", string.Empty));
        var content = new MultipartFormDataContent();

        content.Add(new StreamContent(_mediaFile.GetStream()),
            "\"file\"",
            $"\"{_mediaFile.Path}\"");

        var httpClient = new HttpClient();
        var httpResponseMessage = await httpClient.PostAsync(uri, content);
    }

我目前在我的api控制器中有这个

    [Route("Files/Upload/")]
    [HttpPost]
    public async Task<IActionResult> Post(IFormFile file)
    {
        Debug.Write("******");
        // full path to file in temp location
        var filePath = Path.GetTempFileName();
        Debug.Write("****** File Path " + filePath);

        if (file.Length > 0)
        {
            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await file.CopyToAsync(stream);
            }
        }
        return Ok(new { file });
    }

我尝试应用此https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads,但它的目的是直接从asp net核心应用程序保存图像。 有人能帮我吗?感谢

1 个答案:

答案 0 :(得分:1)

最后我明白了!我需要的是发送图像并将其保存到wwwroot文件夹内的服务器。我留下了服务器控制器的方法,以防将来有人需要它。

    [Route("Files/Upload/")]
    [HttpPost]
    public async Task<IActionResult> Post(IFormFile file)
    {
        //Windows path
        var uploadLocation = Path.Combine(_env.WebRootPath, "Uploads\\UsersImg");

        //Linux path
        //var uploadLocation = Path.Combine(_env.WebRootPath, "Uploads//UsersImg");

        var fileName = file.FileName.Split('\\').LastOrDefault().Split('/').LastOrDefault();

        if (file.Length > 0)
            {
                using (var stream = new FileStream(Path.Combine(uploadLocation, fileName), FileMode.Create))
                {
                    await file.CopyToAsync(stream);
                }
            }
        return Ok();
    }

图像保存在wwwroot文件夹内的/ Uploads / UsersImg /文件夹中。 将图像从客户端发送到服务器的方法与我在问题中发布的方法相同。

如果有人可以对这个问题进行投票,以帮助其他用户。感谢!!!