javascript - 通过网页使用访问 token 检索 GitLab 工件文件并保存到磁盘

标签 javascript ajax rest gitlab httpresponse

我想使用只读访问 token 做三件事,这样网页用户就不需要提供 Gitlab 身份验证。我必须使用 header 中的访问 token 提交 GET 请求,但还没有完全弄清楚如何在 Javascript 中处理响应。

  1. 读取工件路径中特定 .JSON 文件的内容,并分配给变量
  2. 触发工件路径中特定 .XLSX 文件的下载,并保存到磁盘
  3. 触发完整工件存档 .ZIP 的下载,并保存到磁盘

我的代码

    var myHeader = new Headers();
    myHeader.append("PRIVATE-TOKEN", accessToken);

    var myInit = { 
    method: 'GET',
    headers: myHeader
    };
    var myRequest = new Request(artifactPath, myInit);

    // response?

文档

Guidance provided对于 1 和 2:

GET /projects/:id/jobs/artifacts/:ref_name/raw/*artifact_path?job=name
curl --location --header "PRIVATE-TOKEN: <your_access_token>"
    "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/master/raw/some/release/file.pdf?job=pdf"

Guidance provided 3:

GET /projects/:id/jobs/artifacts/:ref_name/download?job=name
curl --header "PRIVATE-TOKEN: <your_access_token>"
    "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/master/download?job=test"

我的印象是 Ajax 会有所帮助,但我从未使用过。非常感谢所有可行的简单性!

最佳答案

AJAX 可以通过 2 个浏览器 API 使用 native JavaScript 实现。

您有 XMLHttpRequest(较旧、更兼容,但语法丑陋):

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/path/to/get');
xhr.setRequestHeader('Your-Header-Name', 'Value');
xhr.onload = function() {
  // What this is depends on what kind of data the endpoint returned
  console.log(xhr.response);
}
xhr.send();

MDN reference

现代 JavaScript 用户通常更喜欢 Fetch API(更新、兼容性较差、简洁的语法):

// Note this will contain some ES6 stuff, such as Promises
fetch('https://example.com/path/to/get', {
  // This is optional: method is GET by default
  method: 'GET',
  headers: {
    'Your-Header-Name': 'Value'
  }
}).then(res => 
  // You can do res.arrayBuffer(), .text(), but assuming the response is JSON...
  res.json()
).then(console.log);

MDN reference

我通常使用fetch,但您使用的方法主要是个人喜好。

关于javascript - 通过网页使用访问 token 检索 GitLab 工件文件并保存到磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63512815/

相关文章:

ajax - YouTube评论功能如何实现?

java - REST:客户端可以通过 POST 传递包装对象吗?

api - 如何验证每个用户可以使用 OAuth 和 OpenID Connect 访问哪些资源?

javascript - setInterval()时如何获取消息;停止

javascript - React setState 在变量初始化之前保持运行

javascript - Firefox 中的 Websockets 不适用于多个 HTTPS 页面

javascript - 获取使用序列化动态检查输入复选框的所有最近字段的值

javascript - 使用 id 号从 JavaScript array.object 获取值

javascript - 为什么 Javascript XMLHttpRequest octet-stream MIME 类型将响应作为字符串返回?

java - 与 REST Web 服务设计相比,使用 Direct Web Remoting 有何优势?