How to create a gist that contains a binary file using curl? - github

Is there a way to create a gist using curl and the Github gist REST API, so that a binary file can be uploaded (for example and image file, or a zip)? I'm mainly interested in being able to upload an SVG file, but I'm also curious as to how it should look for a PNG, or JPEG. I have the following code so far, which works fine for text files:
curl \
-H "Accept: application/vnd.github+json" \
-H "Authorization: token ${GITHUB_TOKEN"} \
https://api.github.com/gists \
-d '{"description":"test-repo-issue-123-20220811-221420","public":false,"files":{"README.md":{"content":"This is a text file."}}}'
But... how would one pass a binary file here? How does it have to be encoded?
How would it look like if it were for an SVG file?

Related

How to attach docs and import issue at the same time using GitHub API?

I need to import all bug reports and attachments from my internal system to GitHub Issues.
What GitHub API parameter should I use to attach a document in my curl command?
curl -X "POST" \
-H "Accept: application/vnd.github+json" \
-H "Accept: application/vnd.github.VERSION.html" \
-H "Authorization: token <token>" \
https://api.github.com/repos/BT23/demo-repo/issues \
-d '{
"title":"Create an issue in HTML format",
"body":"<H1>Testing HTML tags</H1><P>Does it work?</P>",
"assignee": "BT23",
"milestone": 1,
"labels":["bug", "functional"]
}'
Thanks
I do not see the word file anywhere in Issues API.
And this thread confirms you cannot attach a file during Issue Creation.
Adding a file to issue or pull request seems to be done manually through drag & drop only.

Using the Jira REST API with cURL to upload .zip file

So I'm trying to upload a .zip file to Jiras restAPI but I'm getting error 415 unsupported media type.
What I've tried:
curl -D- -u $username:$password -X POST -H "X-Atlassian-Token: no-check" -H "Content-Type:application/zip" -F "file=#result.zip" $myURL/rest/api/2/issue/QTC-12/attachments
But sadly this gives 415.
This is probably due to the -H "Content-Type:application/zip" I suspect that the Jira API isn't expecting a zip as the content type.
As it is using the -F option this is probably a form which is the default content type used by Curl so have you tried removing the zip header and running the command?
Edit:
Just looked at the JIRA API https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue/{issueIdOrKey}/attachments
And it is of multipart/form-data type. The example on the API shows no other content type header.

Unable to upload a zip file into the IBM Cloud S3 bucket

Unable to upload a zip file into the IBM Cloud S3 bucket
Hello Team,
This one is critical for our automation and we are stuck as we dont have the correct syntax to upload a file to the bucket we created. We are trying to upload a zip file into the bucket.
Documentation being refereed:
https://cloud.ibm.com/docs/services/cloud-object-storage/cli?topic=cloud-object-storage-curl#curl-put-object
curl -X "PUT" "https://(endpoint)/(bucket-name)/(object-key)"
-H "Authorization: bearer (token)"
-H "Content-Type: (content-type)"
-d "(object-contents)"
We have the bearer token and i presume the object key is the actual zip file. We are unable to understand what needs to be replaced in content type and object contents.
Could you please site one with an example so we can move ahead on this issue.
Thank you
The standard for zip files is application/zip.
curl -X "PUT" "https://s3.eu.cloud-object-storage.appdomain.cloud/mybucket/archive.zip" \
-H "Authorization: Bearer $COS_ADMIN_TOKEN" \
-H "Content-Type: application/zip" \
-T archive.zip

NextCloud file tagging through WebDAV script

I am using NextCloud 11 to store my personal files, and I use the simple curl script from the documentation in order to upload files to my NextCloud drive:
curl -u user:pw -T test.pdf "http://localhost/nextcloud/remote.php/dav/files/user/test/test.pdf"
Moreover, I would like to directly add some tags to the uploaded files. However, in the official documentation, they just show how files can be uploaded, deleted and moved through the WebDAV interface.
Does anybody have a hint how I could tag a file remotely?
I have posted the same question in the official NextCloud community forum, but I did not receive a response yet. In case I receive a response, I will post it here.
POST https://yournextcloud.com/index.php/api/v1/files/path/to/file
Payload is JSON:
{"tags": ["tag1", "tag2"]}
You will need to authenticate yourself using Basic Auth
Edit: The API can only be called from inside Nextcloud because the CSRF token is required.
For the record, after a bit of digging I found https://doc.owncloud.com/server/latest/developer_manual/webdav_api/tags.html which does the job for nextcloud as well. In a nutshell:
Get file id for a given file:
curl --silent -u user:password -X PROPFIND -H "Content-Type: text/xml" \
--data-binary "#file-propfind.xml" https://nextcloud/remote.php/webdav/file' | xmllint --format -
with a file-propfind.xml in your directory containing something like
<?xml version="1.0" encoding="utf-8" ?>
<a:propfind xmlns:a="DAV:" xmlns:oc="http://owncloud.org/ns">
<a:prop>
<oc:fileid/>
</a:prop>
</a:propfind>
Then get list of tags for this file using
curl --silent -u user:password -X PROPFIND -H "Content-Type: text/xml" \
--data-binary "#tags-propfind.xml" https://nextcloud/remote.php/dav/systemtags-relations/files/<FILEID>" | xmllint --format -
where FILEID is the number you got as oc:fileid in the previous response and tags-propfind.xml a file containing something like
<?xml version="1.0" encoding="utf-8" ?>
<a:propfind xmlns:a="DAV:" xmlns:oc="http://owncloud.org/ns">
<a:prop>
<oc:display-name/>
<oc:user-visible/>
<oc:user-assignable/>
<oc:id/>
</a:prop>
</a:propfind>
This is for tag reading, but the API document also explain how to add a tag in the same fashion.

Mashape multipart-form POST request

I have a POST method in my API which uses multipart encoded form data. I have set up the correct header and data settings so that the mashape web interface generated the following curl:
curl -X POST --include 'https://sslavov-text-analytics-v1.p.mashape.com/news' \
-H 'Authorization: Basic ***********' \
-H 'X-Mashape-Key: ************' \
-H 'Content-Type: multipart/form-data' \
-F 'file=#sample.docx' \
-F 'meta={"documentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"};type=application/json'
Basically i'm trying to upload a file with a simple paragraph of text for processing. The curious part is that when I run this exact curl in a bash script, everything works smoothly, but when I try to run it through mashape, it says either 400 Bad Request or 500 Internal Server Error
In my particular case, these errors are generated when I don't pass correct form or headers. So my question is: Is there an error in the curl syntax or should I keep looking for the error on server side?
EDIT: I figured out what the problem was. -F 'file=#sample.docx' was passed before -F 'meta....' and that was causing the 500 Internal Server Error So now the question is: Is there any way to specifically arrange the order of the form fields (because mashape rearranges them aplhabetically)?