https://pastein.ru/t/xMs
скопируйте уникальную ссылку для отправки
Загрузка данных
using System.Net.Http.Json;
using System.Net;
using System.Text;
using Newtonsoft.Json;
using static CloudRequestSender;
static void Main()
{
MainAsync().Wait();
}
Main();
static async Task MainAsync()
{
// документацию по API можно изучить здесь: https://xn--90aia9aifhdb2cxbdg.xn--p1ai/public_download/docs/Cloud/online/ru/user/ru-RU/programmer/guides.html
// создаём объект CloudRequestSender с API-ключом
CloudRequestSender requestSender = new CloudRequestSender("3bejz51ikxkcr17bx6gehir4on53uuqio57ogeurio718ks3yhcy");
// получаем ID корневой папки с шаблонами
dynamic templateRootFolder = await requestSender.SendRequestAsync("https://xn--80ab2acne.xn--e1aflibyb2b0b.xn--p1ai/api/rp/v1/Templates/Root", CloudRequestSender.RequestMethod.GET);
// выгружаем файл в папку Шаблоны в МоиОтчеты Облако
dynamic template = await requestSender.SendRequestAsync($"https://xn--80ab2acne.xn--e1aflibyb2b0b.xn--p1ai/api/rp/v1/Templates/Folder/{templateRootFolder.id}/File",
CloudRequestSender.RequestMethod.POST, boxFileVM);
// экспортируем отправленный шаблон в PDF
dynamic export = await requestSender.SendRequestAsync($"https://xn--80ab2acne.xn--e1aflibyb2b0b.xn--p1ai/api/rp/v1/Templates/File/{template.id}/Export", CloudRequestSender.RequestMethod.POST,
new ExportVM() { fileName = "exportedByScript.pdf", format = "Pdf" });
System.Threading.Thread.Sleep(1500);
// скачиваем результат экспорта в PDF
await requestSender.SendRequestAsync($"https://xn--80ab2acne.xn--e1aflibyb2b0b.xn--p1ai/download/e/{export.id}",
CloudRequestSender.RequestMethod.GET);
// удаляем шаблон из Облака
await requestSender.SendRequestAsync($"https://xn--80ab2acne.xn--e1aflibyb2b0b.xn--p1ai/api/rp/v1/Templates/File/{template.id}",
CloudRequestSender.RequestMethod.DELETE);
// удаляем экспортированный файл из Облака
await requestSender.SendRequestAsync($"https://xn--80ab2acne.xn--e1aflibyb2b0b.xn--p1ai/api/rp/v1/Exports/File/{export.id}",
CloudRequestSender.RequestMethod.DELETE);
}
public class CloudRequestSender
{
public enum RequestMethod { POST, GET, PUT, DELETE }
private string apiKey;
public CloudRequestSender(string apiKey)
{
this.apiKey = apiKey;
}
public async Task<dynamic> SendRequestAsync(string request, RequestMethod method, object body = null)
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Basic {Base64Encode("apikey:" + apiKey)}");
client.DefaultRequestHeaders.Add("User-Agent", "Cloud API user");
client.DefaultRequestHeaders.Add("accept", "text/plain");
Console.WriteLine($"sending {method} request to {request}");
HttpResponseMessage response;
string json;
StringContent data;
switch (method)
{
case RequestMethod.GET:
response = await client.GetAsync(request);
if (response.Content.Headers.ContentType.MediaType == "application/octet-stream")
{
Console.WriteLine($"{method} request to {request} returned {response.StatusCode}");
if (response.StatusCode != HttpStatusCode.OK) return null;
using (Stream streamToReadFrom = await response.Content.ReadAsStreamAsync())
{
using (var fs = new FileStream("../../../Загрузки/ОтчётЭкспорт.pdf", FileMode.Create, FileAccess.Write, FileShare.None, 4096, true))
{
await streamToReadFrom.CopyToAsync(fs);
}
}
return null;
}
break;
case RequestMethod.POST:
if (body == null) throw new ArgumentException("You can't have body equal to null in POST request");
json = JsonConvert.SerializeObject(body);
data = new StringContent(json, Encoding.UTF8, "application/json");
response = await client.PostAsync(request, data);
break;
case RequestMethod.PUT:
if (body == null)
{
response = await client.PutAsync(request, null);
}
else
{
json = JsonConvert.SerializeObject(body);
data = new StringContent(json, Encoding.UTF8, "application/json");
response = await client.PutAsync(request, data);
}
Console.WriteLine($"{method} request to {request} returned {response.StatusCode}");
return null;
case RequestMethod.DELETE:
response = await client.DeleteAsync(request);
Console.WriteLine($"{method} request to {request} returned {response.StatusCode}");
return null;
default:
return null;
}
Console.WriteLine($"{method} request to {request} returned {response.StatusCode}");
var jsonResult = await response.Content.ReadFromJsonAsync<object>();
return JsonConvert.DeserializeObject<dynamic>(jsonResult.ToString());
}
// простой метод для конвертации текста в base64
private static string Base64Encode(string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
public struct FileVM
{
// название файла с расширением (.frx для шаблонов, .fpx для отчётов)
public string name;
// здесь можно добавить тэги
public string[] tags;
// здесь можно задать изображение в качестве иконки файла
public string icon;
// содержимое файла в base64
public string content;
}
public struct ExportVM
{
// здесь можно задать параметры экспорта
public string[] exportParameters;
// название файла (включая формат экспорта)
public string fileName;
// папка для созданного экспорта (корневая по умолчанию)
public string folderId;
// формат экспорта
public string format;
// здесь можно задать параметры отчёта
public string reportParameters;
}
public static FileVM boxFileVM = new FileVM()
{
name = "createdByScript.frx",
tags = new string[] { "generated" },
icon = null,
content = Convert.ToBase64String(File.ReadAllBytes($"../../../Шаблоны/Список сотрудников.frx"))
};
}