cancel
Showing results for 
Search instead for 
Did you mean: 

Upload file and add properties

Taaviansper
Confirmed Champ
Confirmed Champ

I am trying to upload a file using python requests lib.

I have gotten the file upload working. using 

requests=(files={'filedata': open(file)})

But how can I add properties to the file to upload?

I have some links to possible solutions, but I have not gotten any of them to work.

1) https://stackoverflow.com/questions/32585800/convert-curl-request-to-python-requests-request

2) https://stackoverflow.com/questions/66796487/alfresco-basic-authentication-works-with-curl-but-not-w... (my post)

Content-Length: 248588
Content-Type: multipart/form-data; boundary=2eda0224894a7955aa73990f6d06b87e

2eda0224894a7955aa73990f6d06b87e
Content-Disposition: form-data; name="properties"

cm:title
--2eda0224894a7955aa73990f6d06b87e
Content-Disposition: form-data; name="properties"

cm:description
--2eda0224894a7955aa73990f6d06b87e
Content-Disposition: form-data; name="properties"

cm:author


%PDF-1.4
%Ç쏢
5 0 obj
<</Length 6 0 R/Filter /FlateDecode>>
stream
3 REPLIES 3

Taaviansper
Confirmed Champ
Confirmed Champ
Content-Length: 248595
Content-Type: multipart/form-data; boundary=b4407dae6a30a4e93ba1c0e857cce06b

--b4407dae6a30a4e93ba1c0e857cce06b
Content-Disposition: form-data; name="data"
Content-Type: application/json

{"properties": {"cm:title": "info", "cm:description": "info", "cm:author": info}}
--b4407dae6a30a4e93ba1c0e857cce06b
Content-Disposition: form-data; name="filedata"; filename="application_of_dependency_graphs_to_security_protocol_analysis_0.1_T-5-4.pdf"

%PDF-1.4
%Ç쏢
5 0 obj

I got it into a better state. But it still doesn't read the fields. The problem is things like parameter names. Alfresco Backend reads the file only with parameter 'filedata'. So what is the parameter 'data' or 'json' supposed to be? Is the structure wrong there?

Taaviansper
Confirmed Champ
Confirmed Champ

I have a feeling you can't add the title/description/authors metadata in post request. 

I made a second PUT request right after a successful POST request ( you get the inserted object ID back with POST)

and i was able to add the props successfully

{"properties":{"cm:description":"blaah" etc. }

EddieMay
World-Class Innovator
World-Class Innovator

Hi @Taaviansper 

I've just tested using the API to upload a document with metadata successfully. 

I've used Postman to test the API and it will generate code - here is the Python code:

import requests

url = "http://localhost/alfresco/api/-default-/public/alfresco/versions/1/nodes/-my-/children?alf_ticket=TICKET_1d41b867df221a4d0edcd161d4df7570f1a07f98"

payload={'name': 'Marketing Automation.ppt',
'autoRename': 'true',
'cm:title': 'Marketing Automation',
'cm:description': 'A powerpoint about marketing and automation',
'exif:manufacturer': 'Canon',
'cm:author': 'Eddie May'}
files=[
  ('filedata',('Marketing_Automations_Trial.pptx',open('/Users/emay/Downloads/Marketing_Automations_Trial.pptx','rb'),'application/vnd.openxmlformats-officedocument.presentationml.presentation'))
]
headers = {
  'Authorization': 'Basic dGVzdDp0ZXN0'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

Note that in the payload I've set properties such as title & description. You can also see that it's a POST request.

The result in share is as follows:

imageMetadataYou can see from the creation date that I did it today (26 March 2021).

This should work from Alfresco 5.2 upwards. Here I'm testing against Community Edition 6.2.

HTH,

Digital Community Manager, Alfresco Software.
Problem solved? Click Accept as Solution!