/// <summary> /// Parse metadata taken from a file into a form which can be sent to Campaign. /// </summary> /// <param name="input">String representation of metadata</param> /// <returns>Metadata</returns> public TemplateMetadata Parse(string input) { if (input == null) { throw new ArgumentNullException("input"); } var result = new TemplateMetadata(); foreach (var metadatum in input.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)) { var metadatumMatch = Regex.Match(metadatum, @"^\s*(?<name>[a-z0-9_]+)\s*:\s*(?<value>.*?)\s*$", RegexOptions.IgnoreCase); if (!metadatumMatch.Success) { continue; } var propertyName = metadatumMatch.Groups["name"].Value; var propertyValue = metadatumMatch.Groups["value"].Value; switch (propertyName.ToLower()) { case "schema": { InternalName value; if (InternalName.TryParse(propertyValue, out value)) { result.Schema = value; } } break; case "name": { InternalName value; if (InternalName.TryParse(propertyValue, out value)) { result.Name = value; } } break; case "label": { result.Label = propertyValue; } break; default: result.AdditionalProperties.Add(propertyName, propertyValue); break; } } return(result); }
/// <summary> /// Upload a set of images defined by the settings. /// </summary> /// <param name="requestHandler">Request handler</param> /// <param name="settings">Upload settings</param> public void DoImageUpload(IRequestHandler requestHandler, UploadSettings settings) { var imageData = settings.FilePaths.SelectMany(i => _imageDataProvider.GetData(i)).ToArray(); var totalCount = imageData.Length; var processedCount = 0; var successCount = 0; foreach (var imageItem in imageData) { processedCount++; var mimeType = ImageHelper.GetMimeType(Path.GetExtension(imageItem.FilePath)); if (mimeType == null) { Log.Warn($"Unsupported file type: {imageItem.FilePath}"); continue; } var fileInfo = new FileInfo(imageItem.FilePath); if (!fileInfo.Exists) { Log.Warn($"File does not exist: {imageItem.FilePath}"); continue; } InternalName internalName; if (!InternalName.TryParse(imageItem.InternalName, out internalName)) { Log.Warn($"Failed to parse internal name: {imageItem.InternalName}"); continue; } string md5Hash; using (var md5 = MD5.Create()) using (var stream = File.OpenRead(imageItem.FilePath)) { md5Hash = BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", "").ToLower(); } int width, height; using (var bitmap = new Bitmap(imageItem.FilePath)) { width = bitmap.Width; height = bitmap.Height; } var fileContent = Convert.ToBase64String(File.ReadAllBytes(imageItem.FilePath)); var file = new ImageResource { FolderName = imageItem.FolderName, FileRes = new FileResource { Name = internalName, Label = imageItem.Label, Alt = imageItem.Alt, Width = width, Height = height, }, FileName = fileInfo.Name, MimeType = mimeType, Md5 = md5Hash, FileContent = fileContent, }; var response = _imageWriteService.WriteImage(requestHandler, file); if (!response.Success) { Log.Warn($"Upload of {imageItem.InternalName} failed: {response.Message}"); } else { successCount++; } } Log.Info($"{successCount} images uploaded."); }