public IActionResult Post([FromBody] AlfrescoFile file)
 {
     try
     {
         var task = _uploadService.Upload(file);
         return(new ObjectResult(task.Result));
     }
     catch (Exception e)
     {
         return(new ObjectResult(new ErrorResponse()
         {
             Error = "invalid metadata", ErrorMessage = e.Message
         }));
     }
 }
        public async Task <object> Upload(AlfrescoFile file)
        {
            var client = new HttpClient();

            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Add("X-Alfresco-Remote-User", file.User);
            var multiContent = new MultipartFormDataContent();
            var fileData     = Convert.FromBase64String(file.FileContent);
            var bytes        = new ByteArrayContent(fileData);
            //validate filename
            var prefix = "UN_";

            switch (file.Type)
            {
            case "Сертификат качества":
                prefix = "CQ_";
                break;

            case "Сертификат анализа":
                prefix = "CA_";
                break;

            case "Декларация":
                prefix = "D_";
                break;

            case "Сертификат производителя (русский язык)":
                prefix = "MC_";
                break;

            case "Регистрационное удостоверение":
                prefix = "RC_";
                break;

            case "Сертификат соответствия":
                prefix = "CC_";
                break;

            case "Протокол анализа":
                prefix = "AP_";
                break;

            case "Сертификат соответствия РОСТЕСТ":
                prefix = "CCR_";
                break;

            case "Информационное письмо":
                prefix = "IM_";
                break;

            case "Гигиенический сертификат":
                prefix = "HC_";
                break;

            case "Паспорт":
                prefix = "P_";
                break;

            case "Договор":
                prefix = "A_";
                break;

            case "Протокол разногласий":
                prefix = "DRP_";
                break;

            case "Доверенность":
                prefix = "PA_";
                break;

            case "Доп. соглашения к договору":
                prefix = "EA_";
                break;

            case "Аналитический Лист":
                prefix = "AS_";
                break;

            case "Акт о забраковке":
                prefix = "RA_";
                break;
            }
            var rnd      = new Random();
            var fileName = prefix + DateTime.Now.ToString("yyyyMMddHmm_" + rnd.Next(1, 9999)) + Path.GetExtension(file.FileName).ToLower();

            multiContent.Add(bytes, "filedata", fileName);
            multiContent.Add(new StringContent("name"), fileName);
            var result = await client.PostAsync(file.UploadUrl, multiContent);

            if (result.StatusCode != System.Net.HttpStatusCode.Created)
            {
                return(await result.Content.ReadAsStringAsync());
            }
            var response = await result.Content.ReadAsStringAsync();

            var item  = JObject.Parse(response);
            var props = new JObject
            {
                ["sc:type"]  = !string.IsNullOrEmpty(file.Type) ? file.Type : "Неизвестный",
                ["cm:title"] = file.FileName
            };

            if (!string.IsNullOrEmpty(file.Date))
            {
                var date = DateTime.ParseExact(file.Date, "dd.MM.yyyy", CultureInfo.InvariantCulture);
                props["sc:date"] = date.ToString("yyyy-MM-dd");
            }
            if (!string.IsNullOrEmpty(file.Expired))
            {
                var expired = DateTime.ParseExact(file.Expired, "dd.MM.yyyy", CultureInfo.InvariantCulture);
                props["sc:expired"] = expired.ToString("yyyy-MM-dd");
            }
            var o = new JObject
            {
                ["nodeType"]   = "sc:series",
                ["properties"] = props,
            };
            var json = o.ToString();
            var url  = file.ShareUrl + item["entry"]["id"];

            result = await client.PutAsync(url, new StringContent(json, Encoding.UTF8, "application/json"));

            return(await result.Content.ReadAsStringAsync());
        }