从Web API发送大文件。内容长度为0

问题描述 投票:5回答:1

我试图从一个Web API(.NET Core)发送大文件(GB)到另一个Web Api(.Net Core)。

我已经设法发送较小的文件作为Multipart Request的一部分,如上一篇文章:link

要发送更大的文件,我需要(我认为)将此文件作为StreamContent发送,但是我在接收请求的API中获取内容长度= 0。

enter image description here即使我发送(测试)较小的文件(10 Mb),也会出现问题。

客户端代码:

    [HttpPost("UploadFiles")]
    public async Task<IActionResult> Post(IFormFile file)
    {
        var filePath = Path.GetTempFileName();

        using (var stream = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite))
        {
            await file.CopyToAsync(stream);
            using (var formDataContent = new MultipartFormDataContent())
            {
                using (var httpClient = new HttpClient())
                {
                    formDataContent.Add(CreateFileContent(stream, "myfile.test", "application/octet-stream"));

                    var response = await httpClient.PostAsync(
                        "http://localhost:56595/home/upload",
                        formDataContent);

                    return Json(response);
                }
            }
        }
    }

    internal static StreamContent CreateFileContent(Stream stream, string fileName, string contentType)
    {
        var fileContent = new StreamContent(stream);
        fileContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
        {
            Name = "\"file\"",
            FileName = "\"" + fileName + "\"",
        };
        fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
        return fileContent;
    }

服务器端代码:

    [HttpPost]
    public ActionResult Upload()
    {
        IFormFile fileFromRequest = Request.Form.Files.First();

        string myFileName = fileFromRequest.Name;

        // some code

        return Ok();
    }

问题出在哪儿?

要创建Multipart请求,我使用了以下建议:

HttpClient StreamContent append filename twice

POST StreamContent with Multiple Files

c# asp.net asp.net-web-api asp.net-core
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.