php - 如何通过 API 将 Mp3 文件提交到 Gitlab 中的文件夹
问题描述
我正在尝试通过 API 将文件提交到 Gitlab。
该代码已经工作了 6 个月以上,但现在已经停止工作,代码中没有任何变化。该文件已提交到 Gitlab,但已损坏。
我浏览了 Guzzle 文档,一切看起来都是正确的,我对 Gitlab 关于提交的文档也做了同样的事情。
我现在使用 Laravel Illuminate/Http 类来发送提交,但同样的事情仍在发生。我能够提交到 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,则会收到错误消息:
格式错误的 UTF-8 字符,可能在文件中编码不正确
API 端是否有任何更改影响了如何处理文件以进行提交?有没有其他人找到解决方案?
解决方案
我认为你有两个问题;首先没有指定内容类型。发布请求将multipart/form-data
与文件附件一样发送,也可以不发送application/x-www-url-encoded
。此 API 需要 JSON 数据。
其次, commit端点中有一个参数来指定文件编码。它默认为“文本”,但您发送的是 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',
]
],
]);
推荐阅读
- r - Plotly:双 y 轴图弄乱了折线图
- android - 如何在 Qt Creator for android 中设置 ndk 路径?
- laravel - 我如何访问 laravel 上的会话?
- python - 使用 Selenium 解析动态加载的网页
- python - 更新模型一部分的权重 (nn.Module)
- flask - 为什么路由“/login”和“/register”不起作用?
- c++ - RadioMedium 的 maxCommunicationRange 参数和 Radio 发射机的功率参数之间有什么关系?
- google-analytics - 如何从服务器端设置 Google Analytics(Firebase 分析)用户属性?
- flutter - 显示在配置文件或发布模式下运行的上下文菜单时,Flutter 基本应用程序在 Chrome 上停止响应
- opengl - 尝试访问 gl_Position 时 GLSL 顶点着色器中断