通过文件请求到Web API

塞巴斯蒂安

应用程序将文件发送到Web服务时出现问题。这是我的端点/控制器。

[HttpPost]
    public async Task<IActionResult> Post(List<IFormFile> files)
    {
       
        long size = files.Sum(f => f.Length);

        foreach (var formFile in files)
        {
            if (formFile.Length > 0)
            {
                var filePath = "C:\\Files\\TEST.pdf";

                using (var stream = System.IO.File.Create(filePath))
                {
                    await formFile.CopyToAsync(stream);
                }
            }
        }

该控制器在Postman中工作正常。

这是我的应用程序发出的请求:

             byte[] bytes = System.IO.File.ReadAllBytes("C:\\Files\\files.pdf");

             Stream fileStream = File.OpenRead("C:\\Files\\files.pdf");

             HttpContent bytesContent = new ByteArrayContent(bytes);
            
             using (var client = new HttpClient())
             using (var formData = new MultipartFormDataContent())
             {
                 formData.Add(bytesContent,"file", "files.pdf");
                 try
                 {
                     var response = await client.PostAsync(url, formData);
                 }catch(Exception ex)
                 {
                     Console.WriteLine(ex);
                 }

没用 我没有在控制器中收到文件。我也尝试过这个:

            string fileToUpload = "C:\\Files\\files.pdf";
            using (var client = new WebClient())
            {
                byte[] result = client.UploadFile(url, fileToUpload);
                string responseAsString = Encoding.Default.GetString(result);
            }

但结果是一样的。你能帮忙吗?

迈克尔·王

更新15/09/2020

这是中的上传代码ConsoleApplication它适用于小文件,但不适用于大文件。

    public static async Task upload(string url)
    {

        //const string url = "https://localhost:44308/file/post";
        const string filePath = "C:\\Files\\files.pdf";

        try { 
            using (var httpClient = new HttpClient{
                Timeout = TimeSpan.FromSeconds(3600)
            })
            {
                using (var form = new MultipartFormDataContent())
                {
                    using (var fs = System.IO.File.OpenRead(filePath))
                    {
                        fs.Position = 0;
                        using (var streamContent = new StreamContent(fs))
                        {
                            
                            form.Add(streamContent, "files", Path.GetFileName(filePath));
                            HttpResponseMessage response = httpClient.PostAsync(url, form).Result;
                            fs.Close();

                        }
                    }
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }

    }




有两个步骤可以解决您的问题。

1.将ContentType添加到标题

bytesContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");

2. formData中的文件参数名称应与操作参数名称匹配。

formData.Add(bytesContent,"file", "files.pdf"); //should be files


public async Task<IActionResult> Post(List<IFormFile> files)

更新资料

HttpClient.PostAsync()在控制台应用程序中等待时不起作用。而不是使用.Result进行阻止,请使用.GetAwaiter()。GetResult()。

HttpResponseMessage response = httpClient.PostAsync(url, form).Result;


这是显示如何上传文件的代码。

控制器代码

public class FileController : Controller
    {
        [HttpPost]
        public async Task<IActionResult> Post(List<IFormFile> files)
        {

            long size = files.Sum(f => f.Length);

            foreach (var formFile in files)
            {
                if (formFile.Length > 0)
                {
                    var filePath = "C:\\Files\\TEST.pdf";

                    using (var stream = System.IO.File.Create(filePath))
                    {
                        await formFile.CopyToAsync(stream);
                    }
                }
            }

            return Ok();
        }

        [HttpGet]
        public async Task<IActionResult> upload()
        {

            const string url = "https://localhost:44308/file/post";
            const string filePath = @"C:\\Files\\files.pdf";

            using (var httpClient = new HttpClient())
            {
                using (var form = new MultipartFormDataContent())
                {
                    using (var fs = System.IO.File.OpenRead(filePath))
                    {
                        using (var streamContent = new StreamContent(fs))
                        {
                            using (var fileContent = new ByteArrayContent(await streamContent.ReadAsByteArrayAsync()))
                            {
                                fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");

                                // "file" parameter name should be the same as the server side input parameter name
                                form.Add(fileContent, "files", Path.GetFileName(filePath));
                                HttpResponseMessage response = await httpClient.PostAsync(url, form);
                            }
                        }
                    }
                }
            }

            return Ok();

        }
    }

测试

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Angular压缩请求到Web API

来自分类Dev

从getInitialProps请求到/ api文件夹

来自分类Dev

通过Web Api接收,发送文件

来自分类Dev

通过Web Api接收,发送文件

来自分类Dev

ASP.Net Web Api通过选定列获取请求

来自分类Dev

使用 Node 的请求模块通过 REST API 上传文件

来自分类Dev

Web Api请求超时?

来自分类Dev

Web Api请求超时?

来自分类Dev

通过Web API将文件上传到Azure文件存储

来自分类Dev

通过Web API将文件上传到Azure文件存储

来自分类Dev

Web API的哪种HTTP请求方法可接收大文件

来自分类Dev

通过curl将文件发布到电报bot API

来自分类Dev

C#.NET WEB API:循环文件上传位置可以通过各种异步HTTP请求进行访问和修改

来自分类Dev

Python Post请求到API

来自分类Dev

无法通过 web-api 将文件上传到 slack

来自分类Dev

Angular 2-将文件发布到Web API

来自分类Dev

从Javascript将文件对象传递到Web API

来自分类Dev

无法使用 web api 上传文件到主机

来自分类Dev

如何通过使用OAuth 1.0身份验证的Upwork API通过jQuery AJAX请求JSONP文件?

来自分类Dev

Soap UI 5.3.0:RESTful API - 如何找到通过 Restful API 公开的 Web 服务器的 Web 请求的输入参数

来自分类Dev

通过Rest API启用配置文件时,通过Rest Api获取活动请求时未提供phaseTimes

来自分类Dev

在Azure中请求Web API请求超时

来自分类Dev

同步API请求到异步API请求Swift 2.2

来自分类Dev

遍历文件并执行api请求

来自分类Dev

无法通过请求的类型确定Web API控制器操作名称

来自分类Dev

通过http Post请求将XML发送到Web Api的问题

来自分类Dev

如何使用Android Studio和Web Api通过相同的请求进行发布和获取

来自分类Dev

如何使用Android Studio和Web Api通过相同的请求进行发布和获取

来自分类Dev

Web Api请求引发“将内容复制到流时出错”。

Related 相关文章

  1. 1

    从Angular压缩请求到Web API

  2. 2

    从getInitialProps请求到/ api文件夹

  3. 3

    通过Web Api接收,发送文件

  4. 4

    通过Web Api接收,发送文件

  5. 5

    ASP.Net Web Api通过选定列获取请求

  6. 6

    使用 Node 的请求模块通过 REST API 上传文件

  7. 7

    Web Api请求超时?

  8. 8

    Web Api请求超时?

  9. 9

    通过Web API将文件上传到Azure文件存储

  10. 10

    通过Web API将文件上传到Azure文件存储

  11. 11

    Web API的哪种HTTP请求方法可接收大文件

  12. 12

    通过curl将文件发布到电报bot API

  13. 13

    C#.NET WEB API:循环文件上传位置可以通过各种异步HTTP请求进行访问和修改

  14. 14

    Python Post请求到API

  15. 15

    无法通过 web-api 将文件上传到 slack

  16. 16

    Angular 2-将文件发布到Web API

  17. 17

    从Javascript将文件对象传递到Web API

  18. 18

    无法使用 web api 上传文件到主机

  19. 19

    如何通过使用OAuth 1.0身份验证的Upwork API通过jQuery AJAX请求JSONP文件?

  20. 20

    Soap UI 5.3.0:RESTful API - 如何找到通过 Restful API 公开的 Web 服务器的 Web 请求的输入参数

  21. 21

    通过Rest API启用配置文件时,通过Rest Api获取活动请求时未提供phaseTimes

  22. 22

    在Azure中请求Web API请求超时

  23. 23

    同步API请求到异步API请求Swift 2.2

  24. 24

    遍历文件并执行api请求

  25. 25

    无法通过请求的类型确定Web API控制器操作名称

  26. 26

    通过http Post请求将XML发送到Web Api的问题

  27. 27

    如何使用Android Studio和Web Api通过相同的请求进行发布和获取

  28. 28

    如何使用Android Studio和Web Api通过相同的请求进行发布和获取

  29. 29

    Web Api请求引发“将内容复制到流时出错”。

热门标签

归档