Отправка файла с запросом RestClient - PullRequest
0 голосов
/ 07 мая 2020

У меня есть служба. Net Core, которая принимает IFormFile в качестве параметра. Я хотел бы отправить данные из этого файла IFormFile в Api. Код ниже - это автоматически сгенерированный почтальоном код, который работал по моему запросу. В 'attachmentRequest.AddFile ("файл", файл);' Строка, файл - это строка локального пути, с которого почтальон загрузил файл. Как лучше всего отправить мой 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;
           }
         }

1 Ответ

1 голос
/ 08 мая 2020

Вы используете второй метод 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

...