I would like to attach files to confluence from the rest API using Python with Oauth.
I was trying with the code below but I get the following error message
Unsupported Media Type
description
The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.
fileinfo = open(filename, 'rb') files = { 'file': fileinfo} headers = {'X-Atlassian-Token': 'no-check'} headers['Content-Type'] = 'text/plain' url = self._get_url('content/'+str(contentId) + "/child/attachment") r = self._session.post( url, files=files, headers=headers) #Where _session is my ResilientSession with Oauth info already setup
I was able to get this to work with the following code modified from the jira client, that came from pip install jira.
def content_attachment(self, contentId, filename): url = self._get_url('content/'+str(contentId) + "/child/attachment") #attachment will also work if you just pass the filename attachment = open(filename, 'rb') result = None try: if 'MultipartEncoder' not in globals(): #method = 'old' result = self._session.post( url, files={ 'file': (filename, attachment, 'application/octet-stream')}, headers=CaseInsensitiveDict({'content-type': None, 'X-Atlassian-Token': 'nocheck'})) else: #method = 'MultipartEncoder' def file_stream(): return MultipartEncoder( fields={ 'file': (filename, attachment, 'application/octet-stream')}) m = file_stream() result = self._session.post( url, data=m, headers=CaseInsensitiveDict({'content-type': m.content_type, 'X-Atlassian-Token': 'nocheck'}), retry_data=file_stream) except JIRAError as e: if e.status_code == 400: logging.error(str(e)) return raise if not result or not isinstance(result, collections.Iterable): raise JIRAError("Unable to parse JSON: %s" % result) for data in result: print (data) for fields in result.get(data): print (fields) return fields.get("id") return json_loads(result)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.