Я пытаюсь использовать Convertapi в приложении App Store для Windows, и я хочу отправить файл .docx и получить pdf-файл взамен, я пытаюсь сделать сообщение, но я не уверен, как его сделано, это то, что я до сих пор, но его не работает.Использование convertapi в приложении для Windows Store
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 взамен?
Edit:
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 пытались приспособить ваш ответ немного, так как там, кажется, не быть «File.ReadAllBytes» на окна магазина приложений, им получить этот ответ Тхо: \
Я думаю, вам нужно использовать 'MultipartFormDataContent' и не' FormUrlEncodedContent'. Проверьте [здесь] (http://stackoverflow.com/questions/16416601/c-sharp-httpclient-4-5-multipart-form-data-upload) и [здесь] (http://stackoverflow.com/questions/ 10339877/asp-net-webapi-how-to-perform-a-multipart-post-with-file-upload-use-webapi-ht) для примера. Для содержимого Файла (на основе моего Fiddling запроса этой страницы) 'Content-Disposition' должен быть' form-data; name- "Файл"; filename = "" (заменить ). 'Content-Type может' быть 'application/msword', не уверен. –