Jak dodać załącznik do historii użytkownika za pomocą Rally REST .NET
Jesteśmy w trakcie przenoszenia naszego kodu Rally .NET z SOAP do API REST .NET. Do tej pory tak dobrze, REST API wydaje się być szybszy i łatwiejszy w użyciu, ponieważ nie ma WSDL do złamania za każdym razem, gdy niestandardowe pola produktu roboczego zmieniają się w Rally Workspace.
Mam jednak problem z jedną rzeczą, ponieważ próbujemy odtworzyć możliwość przesyłania załączników. Stosujemy bardzo podobną procedurę do tej opisanej w tym wpisie:
Rally SOAP API - Jak dodać załącznik do wymagania hierarchicznego
Dzięki temu obraz jest odczytywany w System.Drawing.Image. Używamy funkcji ImageToByteArray do konwersji obrazu na tablicę bajtów, która następnie zostaje przypisana do AttachmentContent, który jest tworzony jako pierwszy.
Następnie załącznik zostaje utworzony i połączony zarówno z AttachmentContent, jak i HierarchicalRequirement.
Wszystkie wydarzenia tworzenia działają świetnie. Obiekt treści zostanie utworzony poprawnie. Następnie nowy załącznik o nazwie „Image.png” zostanie utworzony i połączony z historią. Ale kiedy ściągam wynikowy załącznik z Rally, Image.png ma zero bajtów! Próbowałem tego z różnymi obrazami, plikami JPEG, PNG itp. Z tymi samymi wynikami.
Fragment kodu pokazującego nasz proces znajduje się poniżej. Czy jest coś oczywistego, czego mi brakuje? Z góry dziękuję.
// .... Read content into a System.Drawing.Image called imageObject ....
// Convert Image to byte array
byte[] imageBytes = ImageToByteArray(imageObject, System.Drawing.Imaging.ImageFormat.Png);
var imageLength = imageBytes.Length;
// AttachmentContent
DynamicJsonObject attachmentContent = new DynamicJsonObject();
attachmentContent["Content"] = imageBytes ;
CreateResult cr = restApi.Create("AttachmentContent", myAttachmentContent);
String contentRef = cr.Reference;
Console.WriteLine("Created: " + contentRef);
// Set up attachment
DynamicJsonObject newAttachment = new DynamicJsonObject();
newAttachment["Artifact"] = story;
newAttachment["Content"] = attachmentContent;
newAttachment["Name"] = "Image.png";
newAttachment["ContentType"] = "image/png";
newAttachment["Size"] = imageLength;
newAttachment["User"] = user;
// Create the attachment in Rally
cr = restApi.Create("Attachment", newAttachment);
String attachRef = cr.Reference;
Console.WriteLine("Created: " + attachRef);
}
public static byte[] ImageToByteArray(Image image, System.Drawing.Imaging.ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, format);
// Convert Image to byte[]
byte[] imageBytes = ms.ToArray();
return imageBytes;
}
}