Использование конвертапи в приложении Магазина Windows

Я пробую Convertapi в проекте магазина Windows, и я хочу отправить файл.docx и получить взамен файл pdf, я пытаюсь сделать сообщение, но я не уверен, как это было сделано, это то, что у меня пока, но это не работает.

    private async Task GeneratePdfContract(string path) {
try {
    var data = new List < KeyValuePair < string, string >> {
            new KeyValuePair < string, string > ("Api", "5"),
                new KeyValuePair < string, string > ("ApiKey", "419595049"),
                new KeyValuePair < string, string > ("File", "" + stream2),

        };

    await PostKeyValueData(data);

} catch (Exception e) {

    Debug.WriteLine(e.Message);
}

}

private async Task PostKeyValueData(List < KeyValuePair < string, string >> values) {
var httpClient = new HttpClient();
var response = await httpClient.PostAsync("http://do.convertapi.com/Word2Pdf", new FormUrlEncodedContent(values));
var responseString = await response.Content.ReadAsStringAsync();

}

Как мне сделать свое сообщение, чтобы отправить файл.docx и получить взамен файл.pdf?

Редактировать:

private async Task GeneratePdfContract(string path)
    {
        try
        {
            using (var client = new System.Net.Http.HttpClient())
            {
                using (var multipartFormDataContent = new MultipartFormDataContent())
                {
                    var values = new[]
        {
            new KeyValuePair<string, string>("ApiKey", "413595149")
        };

                    foreach (var keyValuePair in values)
                    {
                        multipartFormDataContent.Add(new StringContent(keyValuePair.Value), String.Format("\"{0}\"", keyValuePair.Key));
                    }

                    StorageFolder currentFolder = await ApplicationData.Current.LocalFolder.GetFolderAsync(Constants.DataDirectory);

                    StorageFile outputFile = await currentFolder.GetFileAsync("file.docx");

                    byte[] fileBytes = await outputFile.ToBytes();


                    //multipartFormDataContent.Add(new ByteArrayContent(FileIO.ReadBufferAsync(@"C:\test.docx")), '"' + "File" + '"', '"' + "test.docx" + '"');

                    multipartFormDataContent.Add(new ByteArrayContent(fileBytes));

                    const string requestUri = "http://do.convertapi.com/word2pdf";

                    var response = await client.PostAsync(requestUri, multipartFormDataContent);
                    if (response.IsSuccessStatusCode)
                    {
                        var responseHeaders = response.Headers;
                        var paths = responseHeaders.GetValues("OutputFileName").First();
                        var path2 = Path.Combine(@"C:\", paths);



                        StorageFile sampleFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(@"C:\Users\Thought\AppData\Local\Packages\xxxxx_apk0zz032bzya\LocalState\Data\");
                        await FileIO.WriteBytesAsync(sampleFile, await response.Content.ReadAsByteArrayAsync());


                    }
                    else
                    {
                        Debug.WriteLine("Status Code : {0}", response.StatusCode);
                        Debug.WriteLine("Status Description : {0}", response.ReasonPhrase);
                    }

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

    }

@Tomas попытался немного адаптировать ваш ответ, так как в приложениях Windows Store, похоже, нет "File.ReadAllBytes", я получаю этот ответ, хотя:\

1 ответ

Решение

Вы не можете передать поток файлов в виде строки в HttpClient. Просто используйте метод WebClient.UploadFile, который также поддерживает асинхронную загрузку.

using (var client = new WebClient())
            {                

                var fileToConvert = "c:\file-to-convert.docx";


                var data = new NameValueCollection();                

                data.Add("ApiKey", "413595149"); 

                try
                {                    
                    client.QueryString.Add(data);
                    var response = client.UploadFile("http://do.convertapi.com/word2pdf", fileToConvert);                    
                    var responseHeaders = client.ResponseHeaders;                    
                    var path = Path.Combine(@"C:\", responseHeaders["OutputFileName"]);
                    File.WriteAllBytes(path, response);
                    Console.WriteLine("The conversion was successful! The word file {0} converted to PDF and saved at {1}", fileToConvert, path);
                }
                catch (WebException e)
                {
                    Console.WriteLine("Exception Message :" + e.Message);
                    if (e.Status == WebExceptionStatus.ProtocolError)
                    {
                        Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
                        Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
                    }

                }


            }

Пример использования HttpClient()

    using (var client = new System.Net.Http.HttpClient())
    {
        using (var multipartFormDataContent = new MultipartFormDataContent())
        {
            var values = new[]
            {
                new KeyValuePair<string, string>("ApiKey", "YourApiKey")
            };

            foreach (var keyValuePair in values)
            {
                multipartFormDataContent.Add(new StringContent(keyValuePair.Value), String.Format("\"{0}\"", keyValuePair.Key));
            }

            multipartFormDataContent.Add(new ByteArrayContent(File.ReadAllBytes(@"C:\test.docx")), '"' + "File" + '"', '"' + "test.docx" + '"');

            const string requestUri = "http://do.convertapi.com/word2pdf";

            var response = await client.PostAsync(requestUri, multipartFormDataContent);
            if (response.IsSuccessStatusCode)
            {
                var responseHeaders = response.Headers;
                var paths = responseHeaders.GetValues("OutputFileName").First();
                var path = Path.Combine(@"C:\", paths);
                File.WriteAllBytes(path, await response.Content.ReadAsByteArrayAsync());
            }
            else
            {
                Console.WriteLine("Status Code : {0}", response.StatusCode);
                Console.WriteLine("Status Description : {0}", response.ReasonPhrase);
            }

        }
    }
Другие вопросы по тегам