拉力赛C#:如何上传附件的收集和准与用户故事?

问题描述:

我已审阅本网站上的其他例子,却发现我的方法的主要区别。 (请耐心等待)拉力赛C#:如何上传附件的收集和准与用户故事?

我试图遍历文件的目录和上传每个文件作为附件和准用户故事。 我只能够连接1个文件的用户故事的现在。 我看到每一个附件具有被编码到一个基座64的字符串并且它必须在字节具有一个尺寸。

这是到目前为止我的代码:

public void createUsWithAttachmentList(string workspace, string project, string userStoryName, string userStoryDescription) 
    { 

     //authentication 
     this.EnsureRallyIsAuthenticated(); 

     //DynamicJSONObject for AttachmentContent 
     DynamicJsonObject myAttachmentContent = new DynamicJsonObject(); 

     //Length calculated from Base64String converted back 
     int imageNumberBytes = 0; 

     //Userstory setup 
     DynamicJsonObject toCreate = new DynamicJsonObject(); 
     toCreate["Workspace"] = workspace; 
     toCreate["Project"] = project; 
     toCreate["Name"] = userStoryName; 
     toCreate["Description"] = userStoryDescription; 

     //Trying to get a list of all the file paths within a given directory, this directory would contain .png files that need to be associated to a user story. 
     string[] attachmentPath = Directory.GetFiles("C:\\Users\\user\\Desktop\\RallyAttachments"); 

这foreach循环是混乱的。我试图遍历目录中的每个文件,以便将其转换为base64字符串,并且同时获取每个文件的字节数作为int。

 foreach (string fileName in attachmentPath) 
     { 
      Image myImage = Image.FromFile(fileName); 
      string imageBase64String = imageToBase64(myImage, System.Drawing.Imaging.ImageFormat.Png); 
      imageNumberBytes = Convert.FromBase64String(imageBase64String).Length; 

      //I am stuck here to be exact because there are multiple imageBase64Strings due to the collection of files located inside the directory. AND the below line is wrong because I have a list of imageBase64Strings that were generated from iterating through the string[] attachmentPath. 
      myAttachmentContent[RallyField.content] = imageBase64String; 
     } 

     try 
     { 
      //create user story 
      CreateResult createUserStory = _api.Create(RallyField.attachmentContent, myAttachmentContent); 
      //create attachment 
      CreateResult myAttachmentContentCreateResult = _api.Create(RallyField.attachmentContent, myAttachmentContent); 
      String myAttachmentContentRef = myAttachmentContentCreateResult.Reference; 

      //DynamicJSONObject for Attachment Container 
      //I assume I would need a separate container for each file in my directory containing the attachments. 
      DynamicJsonObject myAttachment = new DynamicJsonObject(); 
      myAttachment["Artifact"] = createUserStory.Reference; 
      myAttachment["Content"] = myAttachmentContentRef; 
      myAttachment["Name"] = "AttachmentFromREST.png"; 
      myAttachment["Description"] = "Email Attachment"; 
      myAttachment["ContentType"] = "image/png"; 
      myAttachment["Size"] = imageNumberBytes; 

      //create & associate the attachment 
      CreateResult myAttachmentCreateResult = _api.Create(RallyField.attachment, myAttachment); 
      Console.WriteLine("Created User Story: " + createUserStory.Reference); 
     } 
     catch (WebException e) 
     { 
      Console.WriteLine(e.Message); 
     } 
    } 

注:我打算扩大这种方法支持多种文件类型,我的事情我需要得到目录中的每个文件的文件类型并进行相应处理。 关于如何写这个的任何想法?

你已经完成了所有的部分 - 我们只需要将它移动一点。在开始创建的故事一次,然后通过循环每次做一个新AttachmentContent并为每个文件的附件。

public void createUsWithAttachmentList(string workspace, string project, string userStoryName, string userStoryDescription) 
{ 

    //authentication 
    this.EnsureRallyIsAuthenticated(); 

    //Userstory setup 
    DynamicJsonObject toCreate = new DynamicJsonObject(); 
    toCreate["Workspace"] = workspace; 
    toCreate["Project"] = project; 
    toCreate["Name"] = userStoryName; 
    toCreate["Description"] = userStoryDescription; 

    //Create the story first 
    try 
    { 
     //create user story 
     CreateResult createUserStory = _api.Create(RallyField.userStory, toCreate); 


     //now loop over each file 
     string[] attachmentPath = Directory.GetFiles("C:\\Users\\user\\Desktop\\RallyAttachments"); 

     foreach (string fileName in attachmentPath) 
     { 
      //DynamicJSONObject for AttachmentContent 
      DynamicJsonObject myAttachmentContent = new DynamicJsonObject(); 
      Image myImage = Image.FromFile(fileName); 
      string imageBase64String = imageToBase64(myImage, System.Drawing.Imaging.ImageFormat.Png); 
      int imageNumberBytes = Convert.FromBase64String(imageBase64String).Length; 
      myAttachmentContent[RallyField.content] = imageBase64String; 

      //create the AttachmentConent 
      CreateResult myAttachmentContentCreateResult = _api.Create(RallyField.attachmentContent, myAttachmentContent); 
      String myAttachmentContentRef = myAttachmentContentCreateResult.Reference; 

      //create an Attachment to associate to story 
      DynamicJsonObject myAttachment = new DynamicJsonObject(); 
      myAttachment["Artifact"] = createUserStory.Reference; 
      myAttachment["Content"] = myAttachmentContentRef; 
      myAttachment["Name"] = "AttachmentFromREST.png"; 
      myAttachment["Description"] = "Email Attachment"; 
      myAttachment["ContentType"] = "image/png"; 
      myAttachment["Size"] = imageNumberBytes; 

      //create & associate the attachment 
      CreateResult myAttachmentCreateResult = _api.Create(RallyField.attachment, myAttachment); 
     }  
    } 
    catch (WebException e) 
    { 
     Console.WriteLine(e.Message); 
    } 
} 
+0

是否可以将压缩目录作为附件压入拉力赛。如果可以,你可以提供任何指针。我开始认为它必须被编码为int base 64字符串。 –

+0

zip文件是有效的附件类型。你是对的 - 内容需要以base4编码。 –