【问题标题】:Get file from Request over .NET Core Api通过 .NET Core Api 从请求中获取文件
【发布时间】:2023-04-03 11:41:01
【问题描述】:

我不知道如何通过 .NET Core API 获取文件并将其保存为文件。

例如: 我使用以下方法上传我的测试文件:

private void Button_Click(object sender, RoutedEventArgs e) {
        var client = new RestSharp.RestClient("https://localhost:44356/api/");

        var request = new RestSharp.RestRequest("Upload", RestSharp.Method.POST);
        request.AddFile(
            "test",
            "c:\\kill\\test.wav");

        client.Execute(request);
    }

我的 API 收到一个请求。 这个方法看起来像这样:

[HttpPost]
    public IActionResult UploadFile() {
        using(var reader = new StreamReader(Request.Body)) {
            var body = reader.ReadToEnd();
        }
        return View();
    }

我的 body 变量包含这个:

-------------------28947758029299 内容处置:表单数据;名称=“测试”;文件名="test.wav" 内容类型:应用程序/八位字节流 RIFF^b

现在我的问题是:

如何获取文件并将其保存在我的光盘上?

我在我的客户端 Restsharp 版本 106.3.1 上使用 .NET Core 2.1 Webapi 和。

【问题讨论】:

标签: c# .net rest asp.net-core restsharp


【解决方案1】:

首先,您需要确定要如何发送文件,即编码类型。这决定了如何解释请求正文。如果你想使用multipart/form-data,那么你的动作签名需要看起来像:

public IActionResult UploadFile(IFormFile test) { // since you made the key "test"

然后,您可以通过以下任一方式获取实际的文件数据:

byte[] bytes;
using (var ms = new MemoryStream())
{
    await test.CopyToAsync(ms);
    bytes = ms.ToArray();
}

或者,如果您想直接使用流:

using (var stream = test.OpenReadStream())
{
    ...
}

【讨论】:

  • 哇哦。我将 IFormFile 的变量简单地命名为“文件”,而不是“测试”。现在它起作用了。谢谢!
  • 没问题。参数名称总是不重要,但如果您直接向参数发布内容,那么名称确实很重要。
猜你喜欢
  • 2017-10-19
  • 2021-10-11
  • 1970-01-01
  • 2019-09-27
  • 2017-07-10
  • 2022-01-26
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多