Reputation: 101
I want to upload files from my system to a directory in github repo using the api .Is there any api endpoint which allows me to do that.
Upvotes: 10
Views: 17305
Reputation: 519
i thought i would write up a more complete answer to this question
as per the documentation docs.github.com : Create or update file contents
you will need an access token
at the time of writing, while logged into your account :
tl;dr github.com : Fine-grained personal access tokens
notes :
so to upload a file to a repository say github.com : http-file-upload
(async()=>{
console.clear();
var file = `
// my test file
`;
var message = 'my commit message';
var owner = 'javascript-2020';
var repo = 'code-projects';
var path = 'http-file-upload/http-file-upload.js';
var token = '<your-github-token>';
var url = `https://api.github.com/repos/${owner}/${repo}/contents/${path}`;
var res = await fetch(url);
var json = await res.json();
var sha = json.sha;
var content = window.btoa(file);
var body = {content,sha,message};
body = JSON.stringify(body);
var headers = {authorization:`Bearer ${token}`};
var opts = {method:'put',headers,body};
var res = await fetch(url,opts);
var json = await res.json();
console.log('result :',res.status,res.statusText);
console.log();
console.log(JSON.stringify(json,null,4));
})();
et voilà!
i prefer this approach because it does not require downloading any libraries
Upvotes: 0
Reputation: 1328912
You should use the GitHub CRUD API which was introduced in .May 2013
It includes:
PUT /repos/:owner/:repo/contents/:path
PUT /repos/:owner/:repo/contents/:path
DELETE /repos/:owner/:repo/contents/:path
Upvotes: 9
Reputation: 25
There's deffinitly a way to do it. This is how I did it;
curl -i -X PUT -H ‘Authorization: token 9xxxxxxxxxxxxxxxxxxxxxxxe2’ -d
‘{“message”: “uploading a sample pdf”,
“content”:”bXkgbm……………………………..”
}’ https://api.github.com/repos/batman/toys/contents/sample.pdf
Where the content property is a base64 encoded string of characters. I used this tool to encode my pdf file. https://www.freeformatter.com/base64-encoder.html
Notice, "batman" is the owner, "toys" is my repo, "contents" has to be there by default, and sample.pdf would the name of the file you want to upload your file as. In short, stick to this format: /repos/:owner/:repo/contents/:path And you can run the identical step for any of these files: PNG (.png) GIF (.gif) JPEG (.jpg) Log files (.log) Microsoft Word (.docx), Powerpoint (.pptx), and Excel (.xlsx) documents Text files (.txt) PDFs (.pdf) ZIP (.zip, .gz)
Good luck. Btw, I have these same details added on here: http://www.simplexanswer.com/2019/05/github-api-how-to-upload-a-file/
Upvotes: 3