繁体   English   中英

在Windows Store应用中使用convertapi

[英]Using convertapi in Windows Store App

我正在Windows商店App项目中试用Convertapi ,我想发送一个.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应用商店中似乎没有“ File.ReadAllBytes”,因此我收到了以下响应: 在此处输入图片说明

您不能将文件流作为字符串传递给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);
            }

        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM