【问题标题】:How to upload a file to 3rd API service using ASP.NET MVC 5 app?如何使用 ASP.NET MVC 5 应用程序将文件上传到第三个 API 服务?
【发布时间】:2018-05-14 22:42:10
【问题描述】:

我有一个基于 asp.net mvc 5 的应用程序。我的一种方法允许用户通过 html 表单上传文件。

当用户发布文件时,框架绑定的表单数据将绑定到名为UploadFileViewModel 的视图模型。 UploadFileViewModel 有一个名为UploadedFile 的属性,其类型为HttpPostedFileBase,它为我提供了有关上传文件的信息。通常,我会使用HttpPostedFileBase 类上的SaveAs() 方法将临时文件保存到服务器上的永久位置。

但是,在这种情况下,我不想将文件保存到服务器,而是需要调用第 3 方 API 来存储文件。 API,需要 3 个参数

  1. 文件(类型文件)
  2. 标题(字符串类型)
  3. recordType(类型字符串)

如何使用WebClient 类将HttpPostedFileBase 对象连同titlerecordType 参数上传到API?

WebClient 类有一个名为 UploadFile 的方法,它接受 uri(字符串)和 fileName(字符串) 如何使用此方法调用远程 API?

【问题讨论】:

  • 您能否提供问题中解释的相应部分的示例代码(例如UploadFileViewModel & WebClient 类)?

标签: asp.net-mvc api asp.net-mvc-5 webclient httppostedfilebase


【解决方案1】:

尝试使用 HttpClient 类

 public async Task UploadAsync()
{
    using (HttpClient client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://hello.net/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        MultipartFormDataContent content = new MultipartFormDataContent();
        ByteArrayContent fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes("C:/Images/testing.png"));
        fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "testing.png" };
        content.Add(fileContent);

        HttpResponseMessage response = await client.PostAsync("api/SaveFile?title=hello&recordType=audio", content);
        .....
        ....
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多