Загрузите файл с помощью основного консольного приложения ASP. NET из конечной точки API. - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть API, который генерирует документы Word и подает их по запросу при использовании конечной точки, например, https://myapi.com/GetDocumentById/ {id}

Я пытаюсь получить консоль приложение для доступа к URL и сохранения файла на локальном диске, например, C: \ Temp

Все решения, с которыми я сталкивался до сих пор, были сосредоточены вокруг MVC, который я, очевидно, не использую .

Может ли кто-нибудь указать мне правильное направление, пожалуйста? Что я должен использовать? Я не могу использовать WebClient, так как DownloadFile ожидает имя файла, и я не обязательно буду его знать. Мне нужно скачать сгенерированный файл с конечной точки.

Спасибо

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

public async Task<string> DownloadFile(string guid)
{
  
    var fileInfo = new FileInfo($"{guid}.txt");
    var response = await _httpClient.GetAsync($"{_url}/api/files?guid={guid}");
    response.EnsureSuccessStatusCode();
    await using var ms = await response.Content.ReadAsStreamAsync();
    await using var fs = File.Create(fileInfo.FullName);
    ms.Seek(0, SeekOrigin.Begin);
    ms.CopyTo(fs);     
    return fileInfo.FullName;
}
0 голосов
/ 22 апреля 2020

Вы можете использовать HttpClient, чтобы получить файл, который возвращается из API, я создал простую демонстрацию для вашей справки.

Во-первых, чтобы создать файл слова, вам нужно скачать DocumentFormat.OpenXml DLL в ваш проект API.

API:

    [Route("api/[controller]")]
    [ApiController]
    public class GetDocumentByIdController : ControllerBase
    {
       [HttpGet("{id}")]
        public IActionResult GenerateDocx(int id)
        {
            using (MemoryStream mem = new MemoryStream())
            {
                using (WordprocessingDocument wordDocument =
        WordprocessingDocument.Create(mem, WordprocessingDocumentType.Document))
                {
                    // Add a main document part. 
                    MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
                    // Create the document structure and add some text.
                    mainPart.Document = new Document();
                    Body body = mainPart.Document.AppendChild(new Body());
                    Paragraph para = body.AppendChild(new Paragraph());
                    Run run = para.AppendChild(new Run());
                     run.AppendChild(new Text("The text in docx which created by " + id.ToString()));
                }
                return File(mem.ToArray(), "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
            }
        }
    }

Консольное приложение:

class Program
    {
        static void Main(string[] args)
        {
            try
            {
                UriBuilder builder = new UriBuilder("http://localhost:50855/api/ApiCode/GenerateDocx/1");
                builder.Query = "id=1";// you can pass any other value
                HttpClient client = new HttpClient();
                var contentBytes = client.GetByteArrayAsync(builder.Uri).Result;
                MemoryStream stream = new MemoryStream(contentBytes);
                FileStream file = new FileStream(@"C:\Temp\ABC.docx", FileMode.Create, FileAccess.Write);
                stream.WriteTo(file);
                file.Close();
                stream.Close();
            }
            catch (Exception)
            {
                throw; //throws 'TypeError: Failed to fetch'
            }
        }
    }

После запуска консольного приложения вы найдете a word file named ABC на пути C:. \ Temp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...