C#将文件上传到转换服务,然后将结果文件下载到特定文件夹

时间:2019-08-08 22:36:00

标签: c# httpclient dotnet-httpclient

我继承了一个C#脚本,该脚本应该将pdf文件上传到converter service,然后下载生成的转换文件。但是似乎此脚本缺少下载部分。

代码如下:

using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using CustomScript.Api;

public class Script
{
    public static CustomScriptReturn CustomScript(CustomScriptArguments args)
    {
        using (HttpClient httpClient = new HttpClient())
            {
              httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "token");
              MultipartFormDataContent form = new MultipartFormDataContent();  
              byte[] fileBytes = File.ReadAllBytes(@"C:\Users\user1\Documents\Test\Files\test1.pdf");
              form.Add(new ByteArrayContent(fileBytes, 0, fileBytes.Length), "test1", "test1.pdf"); 
              HttpResponseMessage response = httpClient.PostAsync("https://pdftables.com/api?key=1234567&format=html", form).Result; 
            }
        return CustomScriptReturn.Empty();
    }
}

此脚本在我们正​​在使用的程序中运行没有错误,但实际上没有下载任何内容,尽管转换器服务的支持人员表示这是正确的。也许问题出在return CustomScriptReturn.Empty行中,但是我不确定C#相对较新。

需要什么代码才能将转换后的文件下载到输入文件所在的相同文件路径?

1 个答案:

答案 0 :(得分:1)

当您对网络服务执行POST时,在这种情况下,它将pdf转换为所选格式,将发生转换并将转换后的数据回吐给您。这是返回数据内容的一部分。您当前的代码设置为始终返回

return CustomScriptReturn.Empty();

这是您永远看不到您要查找的任何数据的部分原因。更好的方法是获得完整的响应

HttpResponseMessage response = httpClient.PostAsync("https://pdftables.com/api?key=1234567&format=html", form)

,然后您可以在发送回CustomScriptReturn.Empty()之前检查以确保一切都很好,例如确保HTTP请求状态为OK,发送已转换的内容流,或者是否未发送为Empty

HttpResponseMessage response = httpClient.PostAsync("https://pdftables.com/api?key=1234567&format=html", form)
if ((int)response.StatusCode == 200)
{
    //obviously you will need to handle converting the return data to your custom type
    return (CustomScriptReturn)response.Content.ReadAsStringAsync();
}
else
{
    return CustomScriptReturn.Empty();
}