You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab包管理器为何插入WebKitFormBoundary?如何保留原内容?

问题原因

你用FormData包装文件并通过fetch上传时,浏览器会自动将请求格式设为multipart/form-data,并添加分隔边界、文件头信息等内容。而GitLab Package Registry的单个文件上传PUT接口,期望直接接收文件的原始内容,而非multipart表单格式,所以服务器会把整个表单的内容(包括边界和头)当作文件内容保存下来。

解决方法

去掉FormData的包装,直接将选中的文件对象作为请求体发送即可:

修改后的核心代码:

function Send() {
  // 获取选中的文件
  const select_file = document.getElementById('formFile').files[0];
  if (!select_file) return;

  fetch(file_string, {
    method: "PUT",
    headers: {
      "PRIVATE-TOKEN": GITTOKEN,
      // 可手动设置文件Content-Type,或让浏览器自动推断
      "Content-Type": select_file.type || "application/octet-stream"
    },
    body: select_file // 直接传递文件对象,而非FormData
  })
  .then((response) => response.json())
  .then((data) => {
    // 处理响应逻辑
  })
  .catch(error => {
    // 错误处理逻辑
  });
}

这样上传时,请求体就是文件的原始内容,GitLab会正确保存文件的实际内容,不会添加多余的表单边界信息。

内容的提问来源于stack exchange,提问作者NicoCaldo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:32:34