如何使用python-gitlab API正确上传存储GitLab二进制文件?
解决方案
你遇到的问题是提交请求的参数名填写错误导致的:GitLab Commits API 要求标识内容编码的字段是 encoding,而非你代码里写的 encode,因此GitLab没有识别到你传入的是base64编码的二进制内容,直接将base64字符串作为普通文本存储,就出现了你看到的现象。
你还需要修正一个代码逻辑问题:gitlab.Gitlab() 返回的是全局GitLab实例对象,需要先调用 projects.get() 获取对应项目的实例,才能调用项目下的commits接口,否则会触发404错误。
修正后的完整可运行代码如下:
import gitlab import base64 # 初始化GitLab连接 gl = gitlab.Gitlab("你的GitLab实例地址", private_token="你的访问TOKEN") # 替换为你的项目路径或者数字ID project = gl.projects.get("namespace/project_name") # 读取二进制文件并做base64编码 with open("my_file.o", 'rb') as f: bin_content = base64.b64encode(f.read()).decode() # 构造提交数据 data = { 'branch': 'main', 'commit_message': '上传二进制文件', 'actions': [ { 'action': 'create', 'file_path': 'my_file.o', 'content': bin_content, 'encoding': 'base64' } ] } # 提交到仓库 project.commits.create(data)
如果需要更新已有的二进制文件,将action字段的值改为update即可;如果需要批量上传多个文件,往actions数组中添加多个文件配置项即可,单次提交最多支持同时处理100个文件。
这种实现方式和GitLab网页端上传文件的底层逻辑完全一致,上传后的文件会以原始二进制格式正常存储。
内容的提问来源于stack exchange,提问作者Rad226
相关产品推荐
相关产品推荐

