首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文件从控制台应用程序上载到WebAPI

将文件从控制台应用程序上载到WebAPI
EN

Stack Overflow用户
提问于 2018-06-27 01:56:15
回答 2查看 3.6K关注 0票数 2

我正在尝试将一个文件+一些信息发布到我控制的WebApi上。我的问题是我无法访问WebAPI端的文件,所有其他字段都可以。

以下是我的控制台应用程序代码

代码语言:javascript
复制
using (HttpClient client = new HttpClient())
{
    using (MultipartFormDataContent content = new MultipartFormDataContent())
    {
        string filename = "my_filename.png";

        content.Add(new StringContent(DateTime.Now.ToString("yyyy-MM-dd")), "data");


        byte[] file_bytes = webClient.DownloadData($"https://my_url/my_file.png");
        content.Add( new ByteArrayContent(file_bytes), "file");

        string requestUri = "http://localhost:51114/api/File";

        HttpResponseMessage result = client.PostAsync(requestUri, content).Result;
        Console.WriteLine("Upload result {0}", result.StatusCode);
    }
}

这是我的WebAPI代码

代码语言:javascript
复制
 [HttpPost]
 public void Post(IFormFile file, [FromForm] DateTime data)
 {
     if (file == null || file.Length == 0)
     {
         Response.StatusCode = StatusCodes.Status400BadRequest;
         return;
     }
     // Never reaches this point..... file is null

 }

对我可能遗漏的东西有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2018-06-27 04:21:04

如果我没记错的话,您可以将文件提交到WebAPI端点,并使用Content-Type : multipart/form-data将其作为FormData发送,如下所示。

代码语言:javascript
复制
[HttpPost]
[Route("..."]
public void ReceiveFile()
{
     System.Web.HttpPostedFile file = HttpContext.Current.Request.Files["keyName"];
     System.IO.MemoryStream mem = new System.IO.MemoryStream();
     file.InputStream.CopyTo(mem);
     byte[] data = mem.ToArray();
     // you can replace the MemoryStream with file.saveAs("path") if you want.

}
票数 1
EN

Stack Overflow用户

发布于 2018-06-27 04:33:09

你可以在两行代码中提取内容并将其转换为字节数组,假设你只发送一个文件(注)这是一个好主意,使用异步上传文件,这样你就不会消耗太多的cpu时间:

代码语言:javascript
复制
var provider = await Request.Content.ReadAsMultipartAsync(new MultipartMemoryStreamProvider());
var file = provider.Contents.Single();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51048938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档