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.