通过 .NET Core 从 Request 获取文件 Api

Get file from Request over .NET Core Api

我不知道,如何通过我的 .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 Content-Disposition: form-data; name="test"; filename="test.wav" Content-Type: application/octet-stream RIFF^b

现在我的问题是:

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

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

首先,您需要确定发送文件的方式,即编码类型。这决定了请求正文的解释方式。如果您想使用 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())
{
    ...
}