如何通过API将Mp3文件提交到Gitlab中的文件夹

How to Commit Mp3 Files to Folders in Gitlab through API

我正在尝试通过 API.

将文件提交到 Gitlab

该代码已经运行了 6 个多月,但现在已停止运行,代码中没有任何更改。该文件已提交到 Gitlab,但已损坏。

我浏览了 Guzzle 文档,一切看起来都是正确的,我也对 Gitlab 文档中关于提交的内容做了同样的事情。

我现在正在使用 Laravel Illuminate/Http class 发送提交,但同样的事情仍在发生。我可以提交到 Gitlab,但文件格式不正确。

$response = Http::withHeaders([
    'PRIVATE-TOKEN' => $gitlab_token,
])
    ->post('https://gitlab.com/api/v4/projects/.../repository/commits/', [
        'branch' => 'test-branch',
        'commit_message' => 'Updated audio file test.mp3',
        'actions' => array(array(
            'action' => 'update',
            'file_path' => 'filePath/../.mp3',
            'content' => base64_encode($var)
        )),
    ]);

如果我不将文件内容编码为 base 64,我会收到错误消息:

Malformed UTF-8 characters, possibly incorrectly encoded in file

API 方面是否有任何变化影响了提交文件的处理方式?还有其他人找到解决方案吗?

我认为你有两个问题;首先没有指定内容类型。 post 请求将像带文件附件的 multipart/form-data 或不带文件附件的 application/x-www-url-encoded 一样发送。此 API 需要 JSON 个数据。

其次,commit endpoint中有一个参数指定文件编码。它默认为“文本”,但您发送的是 base64 编码的文件。

我对 Gitlab 不够熟悉 API 不能肯定地说,但是你的 file_path 属性 看起来也很奇怪;不应该只是将“.mp3”放入该目录吗?

试试这个:

$response = Http::withHeaders([
    'PRIVATE-TOKEN' => $gitlab_token,
    'Content-Type' => 'application/json',
])
    ->post('https://gitlab.com/api/v4/projects/.../repository/commits/', [
        'branch' => 'test-branch',
        'commit_message' => 'Updated audio file test.mp3',
        'actions' => [
            [
                'action' => 'update',
                'file_path' => '.mp3',
                'content' => base64_encode($var),
                'encoding' => 'base64',
            ]
        ],
    ]);