c# - 将文件从控制台应用程序上传到 WebAPI
问题描述
我正在尝试将文件 + 一些信息发布到我控制的 WebApi。我的问题是我无法访问WebAPI端的文件,所有其他字段都可以。
这是我的控制台应用程序代码
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 代码
[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
}
关于我可能遗漏的任何指示?
解决方案
如果我没记错的话,您可以将文件提交到 WebAPI 端点,将其作为带有 的 FormData 发送Content-Type : multipart/form-data
,类似这样。
[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.
}
推荐阅读
- ios - 使用 indexOfObject:inSortedRange:options:usingComparator: 二进制搜索基于属性前缀过滤 NSArray
- javascript - 使用JS从json中删除具有空值的键
- php - cakephp CSRF 令牌绕过
- docker - 如何在不执行指定命令的情况下启动 docker 容器
- c# - 更改窗口样式
- swift - 为什么在实现 KYDrawerController 时标签栏被移除?
- node.js - 意外数字:加载 CSV 文件时 Node.js 上的 csv-parser 模块中的语法错误
- laravel - 检查侦听器返回值并在 laravel 中执行操作是否可以接受?
- python - 在 for 循环中处理浮点数的元组
- r - 使用ggplot获取带有百分比标签的条形图的最有效方法