I have a Confluence page with the following file attached to it:
Test1 - :::;;;’’~!@#$%^&*()_+`-=[]{}"’|<>,.?/.txt
What should be API call to download it?
server/download/attachments/id/{what should go here?}
Thank you
I have a Confluence page with the following file attached to it:
Test1 - :::;;;’’~!@#$%^&*()_+`-=[]{}"’|<>,.?/.txt
What should be API call to download it?
server/download/attachments/id/{what should go here?}
Thank you
Attachments page in confluence with this file contains download link, which is not functional:
server/download/attachments/id/Test1%20-%20:::;;;''~!@%23$%25%5E&*()_+%60-=%5B%5D%7B%7D%22'%7C%5C%3C%3E,.%3F/.txt
However, the file can be viewed and edited successfully through respective “View” and “Edit” links on the same page.
I found this useful link regarding allowed characters:
https://migrations.atlassian.net/wiki/spaces/UWC/pages/1015842/UWC+Illegal+Pagenames+Framework
Confluence’s List of Illegal Characters
Characters not allowed in Confluence pagenames:
: ; < > @ / \ | # { } ^
Characters not allowed to start Confluence pagenames:
$ … ~
Does it also apply to attachment names and API calls?
i had a hard time creating a file with the name you proposed
on linux it is not possible to create files containing the forward slash “/” (See this SO article: linux - Is it possible to use "/" in a filename? - Stack Overflow )
Escaping the forward slash would be %2F, maybe this works for you, however i recommend not using the forward slash in file names because of linux/macosx users.
i think this is why you are facing the mentioned problem.
removing the forward slash, i was able to create a file called “Test1 - :::;;;’’~!@#$%^&*()_+`-={}”’|<>,.?.txt" and uploaded it to a page.
The generated link: server/download/attachments/9634073/Test1%20-%20%3A%3A%3A%3B%3B%3B%E2%80%99%E2%80%99~%21@%23%24%25%5E%26*%28%29_%2B%60-%3D%5B%5D%7B%7D%22%E2%80%99%7C%3C%3E%2C.%3F.txt?api=v2
works.
If you are talking about the REST-API this call gives you all information confluence can give you about your attachments:
AJS.$.get(‘server/rest/api/content/’ + AJS.params.pageId + ‘/child/attachment’, console.log);
in the _links property of the result you will find the “self” link (i think this is based on HATEOAS - Wikipedia). Following the “self”-link you are able to get the download link for your attachment as generated by confluence. in my case this looked like this:
self-link: server/rest/api/content/9634073/child/attachment?_=1523538394077
response:
{
"results": [
{
"id": "att9634075",
"type": "attachment",
"status": "current",
"title": "Test1 - :::;;;’’~!@#$%^&*()_+`-=[]{}\"’|<>,.?.txt",
"metadata": {
"mediaType": "text/plain",
"labels": {
"results": [],
"start": 0,
"limit": 200,
"size": 0,
"_links": {
"self": "server/rest/api/content/att9634075/label"
}
},
"_expandable": {
"currentuser": "",
"properties": "",
"frontend": ""
}
},
"extensions": {
"mediaType": "text/plain",
"fileSize": 5
},
"_links": {
"webui": "/display/ES/Attachment+Test?preview=%2F9634073%2F9634075%2FTest1+-+%3A%3A%3A%3B%3B%3B%E2%80%99%E2%80%99~%21@%23%24%25%5E%26*%28%29_%2B%60-%3D%5B%5D%7B%7D%22%E2%80%99%7C%3C%3E%2C.%3F.txt",
"download": "/download/attachments/9634073/Test1%20-%20%3A%3A%3A%3B%3B%3B%E2%80%99%E2%80%99~%21@%23%24%25%5E%26*%28%29_%2B%60-%3D%5B%5D%7B%7D%22%E2%80%99%7C%3C%3E%2C.%3F.txt?version=1&modificationDate=1523537554822&api=v2",
"self": "server/rest/api/content/att9634075"
},
"_expandable": {
"container": "/rest/api/content/9634073",
"operations": "",
"children": "/rest/api/content/att9634075/child",
"history": "/rest/api/content/att9634075/history",
"ancestors": "",
"body": "",
"version": "",
"descendants": "/rest/api/content/att9634075/descendant",
"space": "/rest/api/space/ES"
}
}
],
"start": 0,
"limit": 50,
"size": 1,
"_links": {
"self": "server/rest/api/content/9634073/child/attachment?_=1523538320155",
"base": "server",
"context": ""
}
}
@matthias.steinboeck, I cannot tell how grateful I am for the time you took writing your thoughtful reply to this question. I despaired already expecting a reasonable feedback on this serious problem.
You might think that the problem is artificial and exaggerated. It is not. We encounter massive amounts of malformed attachment names in Confluence instances of our client. We and our clients are facing serious problems dealing with them.
How these files appear? In our observations, not manually. We see third party plugins as main source of malformed files. It seems that any plugin can give any file in Confluence any incompatible name.
I regret that you spent too much time creating malformed file in Confluence. It is not related to your Linux (although, I m working on Windows). To create malformed attachment:
Some Confluence links on this malformed attachment work, some - not. It seems that Confluence is smart enough to download such attachments with in-place character substitution. I saw improper characters implicitly replaced by underlines when downloading these attachments to local disk.
In general, I think there must be some internal server control to prevent this mess. However, because such names were already widely spread through plugins, it might break compatibility of many client installations.
What I mean, it is a serious fundamental problem in Confluence with these names, not just a silly fantasy of tech geeks devising how to break the system.
Hey @boris.zinchenko no probs dude, having some serious problems with confluence server on my own i thought why not give your topic a try.
i totally agree there is a lot of in-transparent - some times even inconsistent - stuff.
I tried to follow your steps, but confluence 6.4.3. did not accept illegal characters.
I totally understand your problem with 3rd party plugins (having some on my own concerning the consistency of the macro-id). that sounds like a mess fortunately i did not make the file-name experience yet, so its hard for me to give you any pointers there.
I guess (hope) Atlassian has some internal convention about how to handle file names, but how they exactly do that i don’t know and besides the error message i don’t know of any other resource giving any pointers…
@matthias.steinboeck, Thank you for an apt feedback. I m delighted to know that Atlassian blocked this dangerous option at least in the latest server release. Who knows, maybe our discussion here triggered this change! I m running my tests on cloud Confluence, which traditionally lags behind on premise servers. There dangerous renaming is still in effect. Please see attached screen. Hitting “save” button saves this ugly name very fine.