我构建了一个小型 HTML/JS 页面,它使用 GitLab API 将文件上传到包注册表中,例如:
<input class="form-control mb-1" type="file" id="formFile" />
<button class="btn btn-primary w-100" onclick="Send();">
<script>
function Send() {
...
var formData = new FormData();
formData.append("file", select_file);
fetch(file_string, {
method: "PUT",
headers: {
"PRIVATE-TOKEN": GITTOKEN,
},
body: formData,
})
.then((response) => response.json())
.then((data) => {
...
我注意到,出于某种原因,如果我上传像 crc.txt 这样的文本文件,其中仅包含像 ac8daadc 这样的 CRC 代码,GitLab 似乎会写入文件的有效负载/内容,如下所示:
------WebKitFormBoundaryVPZEUt253yBGuPTN
Content-Disposition: form-data; name="file"; filename="crc.txt"
Content-Type: text/plain
ac8daadc
------WebKitFormBoundaryVPZEUt253yBGuPTN--
这是为什么呢?我可以保留原始有效负载吗?
事实证明问题出在
var formData = new FormData();formData.append("file", select_file);
代码上。
formData 不仅上传数据,还将其他信息序列化到文件中,从而破坏文件。
直接使用
传递文件 fetch(file_string, {
method: "PUT",
headers: {
"PRIVATE-TOKEN": GITTOKEN,
},
body: select_file,
})
工作了