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
相关产品推荐
相关产品推荐

