03-23-2020 04:21 AM
Hi,
I'm doing some tests with Rest Api in Python.
Following the rest Api Explorer (https://api-explorer.alfresco.com/api-explorer/#!/nodes/createNode) and this link: https://docs.alfresco.com/6.2/concepts/dev-api-by-language-alf-rest-upload-file.html
I found the way to create node, uploading file with correct properties (working also with custom type and custom properties) using multipart/form-data in python with the "requests" library.
Here's a small example:
import os import requests from requests.auth import HTTPBasicAuth USER = "username" PASSWD = "password" def upload_file(): thisfolder = os.path.dirname(os.path.abspath(__file__)) docfile = os.path.join(thisfolder, 'picture.jpg') node_id = "4efc2abb-e12c-4995-b2e4-f2ff5ee022ae" # SAS uuid opUrl = 'nodes/%s/children' % node_id with open(docfile, 'rb') as file: files = {'filedata': file} createURL = 'http://127.0.0.1:8080/alfresco/api/-default-/public/alfresco/versions/1/%s' % opUrl data = { "name": "picture.jpg", "nodeType": "cm:content", "overwrite": "true", "cm:title": "My Picture", "cm:description": "This is my picture", } response = requests.post(createURL, data=data, files=files, auth=HTTPBasicAuth(USER, PASSWD) ) print(response) print(response.json) print(response.text) print(response.headers) if __name__ == "__main__": upload_file()
My question concerns the "overwrite" option, it's incrementing the version when doing upload with the same "name", so i can change my file and version number is updated.
But "properties" (cm:title, cm:description,...) are never updated... so the overwrite option seems not concerning the "properties" but only the data... Very annoying when using custom properties or if i just want to update title or description. Is this a bug ? Am i missing an option ?
Thanks for help!
03-26-2020 01:52 PM
Hi,
Thanks for the suggestion. Yes, unfortunately, that does seem to be the case at the moment. See for example:
https://github.com/Alfresco/alfresco-remote-api/blob/master/src/main/java/org/alfresco/rest/api/impl... (and surrounding code).
If I'm undertanding you correctly you would like to use multi-part/form data to not only create a new file node (with content & properties) but also update the same file in a similar way. I think your suggestion would be to use POST with "overwrite" flag.
Alternatively, it could be done with PUT in the same way if we implemented and extended https://issues.alfresco.com/jira/browse/REPO-146 idea to enable update of content & properties as a single request. The difference would be using "PUT" (with known node id) instead of "POST with overwrite" (with known node name).
I suggest you raise a new enhancement request in JIRA or update REPO-146 with more info if that might help. You could also provide a contribution with tests (and updates to the REST API Explorer).
In the meantime, can you make two calls ?
Thanks,
Jan
03-30-2020 03:29 AM
Hi Jan,
Thanks for your answer.Indeed, i could use "PUT", but "PUT" needs an existing node... In my case, using the POST with the "overwrite" flag allows me not to check if node already exists... so i could create or update existing node with the same api call. It seems logical to me that overwrite option allows to update properties...
@janv wrote:If I'm undertanding you correctly you would like to use multi-part/form data to not only create a new file node (with content & properties) but also update the same file in a similar way. I think your suggestion would be to use POST with "overwrite" flag.
Alternatively, it could be done with PUT in the same way if we implemented and extended https://issues.alfresco.com/jira/browse/REPO-146 idea to enable update of content & properties as a single request. The difference would be using "PUT" (with known node id) instead of "POST with overwrite" (with known node name).
In the case of using PUT, i've first to do a POST without "overwrite", catching errors and in case of 409 error, searching for the node_id then doing a PUT to update content and properties...
I'm just a user, i do not feel comfortable with Java so do not feel able to provide contribution... just providing an idea for an eventual enhancement.
03-19-2021 02:02 PM
Hi,
Can anyone help me with this issue.
I am not able to use the "overwrite" flag in my post request. when i have that flag i am getting the following error,
Could not read content from HTTP request body: Unrecognized field \"overwrite\" (class org.alfresco.rest.api.model.Node)
I am using alfresco 6.2.2
03-22-2021 09:41 AM
Hi @udaikumar26
If you're updating an existing node I think you should be using PUT instead of POST? See https://api-explorer.alfresco.com/api-explorer/#/nodes/updateNode
HTH,
Explore our Alfresco products with the links below. Use labels to filter content by product module.