【问题标题】:C# Azure Devops API Git: How to push files using the C# APIC# Azure Devops API Git:如何使用 C# API 推送文件
【发布时间】:2020-08-19 13:04:39
【问题描述】:

所以我已经设法按照提供的示例代码使用 API 推送基本文件。

我通过逐行读取文件并将它们转换为字符串,然后将它们作为原始文本发送到 GitCommitRef 中,就像示例一样。但是,我不确定如何推送更复杂的文件,这些文件不容易读取并转换为字符串,例如 DLL。

有没有办法使用 C# 推送诸如此类的文件?

下面是我用来创建提交的代码:

        GitCommitRef commit = new GitCommitRef()
        {
            Comment = "Add a sample file",
            Changes = new GitChange[]
            {
                new GitChange()
                {
                    ChangeType = VersionControlChangeType.Add,
                    Item = new GitItem() {Path = "/TESTFOLDER/" + fileName, GitObjectType = GitObjectType.Blob, IsFolder = false },
                    NewContent = new ItemContent()
                    {
                        Content = Utilities.ReadFile(fileNamePath),
                        ContentType = ItemContentType.RawText
                    }

                }
             }
        };

【问题讨论】:

    标签: c# git azure-devops


    【解决方案1】:

    可以通过将文件读入字节数组、将该数组转换为 base64 字符串并推送内容类型为 EncodedBase64 的字符串来推送无法读入字符串的 Dll 和其他更复杂的文件。

    推送 base 64 字符串

                    new GitChange()
                    {
                        ChangeType = VersionControlChangeType.Add,
                        Item = new GitItem() {Path = "/TESTFOLDER/" + fileName2, GitObjectType = GitObjectType.Blob, IsFolder = false },
                        NewContent = new ItemContent()
                        {
                            Content = Utilities.ReadFileAsBytes(fileNamePath2).ToString(),
                            ContentType = ItemContentType.Base64Encoded
                        }
    
                    }
    

    获取字符串为 Base 64

            using (System.IO.FileStream stream = new System.IO.FileStream(path, System.IO.FileMode.Open))
            {
                byte[] arr = new byte[stream.Length];
                int numBytesToRead = (int)stream.Length;
                while (numBytesToRead > 0)
                {
                    int n = stream.Read(arr, 0, (int)stream.Length);
    
                    if (n == 0)
                    {
                        break;
                    }
    
                    numBytesToRead -= n;
                }
                return Convert.ToBase64String(arr);
            }
    

    【讨论】:

    • 感谢分享,可以标记为答案,这样其他人可以直接找到有用的解决方案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多