使用RestClient请求发送文件

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

我在.Net Core中有一个服务,该服务将IFormFile作为参数。我想将数据从此IFormFile发送到Api。下面的代码是邮递员为我的请求自动生成的代码。在“ attachmentRequest.AddFile(“ file”,file);”中行,文件是邮递员从中上传文件的本地路径的字符串。将IFormfile作为发送的文件发送的最佳方法是什么?我是否使用流并将IFormfile保存到.Net Core中的某个位置并传递该地址?

          public async Task<bool> PostIssue(IFormFile file)
            {
            var client = new RestClient("https://sample/10000/attachments");
            client.Timeout = -1;
            var attachmentRequest = new RestRequest(Method.POST);
            attachmentRequest.AddHeader("X-Atlassian-Token", "no-check");
            attachmentRequest.AddHeader("Authorization", "Basic xxxxxxxxxxxxxx=");
            attachmentRequest.AddHeader("Cookie", "atlassian.xsrf.token=xxxxxxxxxxxxxxxxxx_lin");
            attachmentRequest.AddFile("file", file);
            IRestResponse attachmentResponse = client.Execute(attachmentRequest);
            Console.WriteLine(attachmentResponse.Content);

            if (attachmentResponse.IsSuccessful)
            {
                return true;
            }
            else
            {
                return false;
           }
         }
c# asp.net-core stream postman
1个回答
1
投票

您使用AddFile的第二种方法:

  public IRestRequest AddFile (string name, byte [] bytes, string fileName, string contentType = null);

将IFormFile文件转换为byte array格式,而不是获取传输文件的路径。

您所说的确实可以使用流上传到本地,但这是一个额外的操作,您可以将IFormFile直接操作为字节形式并将其传输到API,如下所示:

 public async Task<bool> PostIssue(IFormFile file)
        {
            var client = new RestClient("http://localhost:50855/Users");
            client.Timeout = -1;
            var attachmentRequest = new RestRequest(Method.POST);
            attachmentRequest.AddHeader("X-Atlassian-Token", "no-check");
            attachmentRequest.AddHeader("Authorization", "Basic xxxxxxxxxxxxxx=");
            attachmentRequest.AddHeader("Cookie", "atlassian.xsrf.token=xxxxxxxxxxxxxxxxxx_lin");

            using (var ms = new MemoryStream())
            {
                file.CopyTo(ms);
                var fileBytes = ms.ToArray();
                attachmentRequest.AddFile("filename",fileBytes, file.FileName);
            }
            IRestResponse attachmentResponse = client.Execute(attachmentRequest);
            Console.WriteLine(attachmentResponse.Content);
            if (attachmentResponse.IsSuccessful)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

Api:

public async Task<IActionResult> attachments()
        {
            var file = Request.Form.Files["filename"]; //get the file
            //do something you want
            return Ok();
        }

这里是测试结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.