Preservica v8.4 & Upload API

13 views
Skip to first unread message

Roxana Maurer-Popistașu

unread,
Mar 6, 2026, 9:20:49 AM (7 days ago) Mar 6
to pyPreservica
Hi James,

In the middle of ingesting ~20.000 digitized books, our Preservica EoP installation was upgraded from v7.6 to v8.4 and our ingest script using PyPreservica's Upload API stopped working. The upload gets started, we get back an UploadId, but then we get a ConnectionClosedError: Connection was closed before we received a valid response from endpoint URL: "https://[API_URL]/api/s3/buckets/bnl.package.upload/ac4c1199-38a2-4368-91d3-55e9d1cfb927.zip?uploadId=ac4c1199-38a2-4368-91d3-55e9d1cfb927.zip-4f22d418-f31d-4a71-a978-3fb5a2230090&partNumber=10" 
When debugging the issue with the colleagues from the Computing Centre, they told us that the file pops up briefly in Preservica's multi-part folder and then it gets deleted, without an ingest getting started. 

Furthermore, they did some multi-part upload tests on their side using Preservica's native APIs and apparently they only work now when sending an XML file with all the parts of the file:

curl -vk -X POST \
               --url "$API_BASE/s3/buckets/etat.package.upload/$2?uploadId=$upload_id" \
               -H "Preservica-Access-Token: $TOKEN" \
               -T "./CompleteMultipartUpload.xml"

where CompleteMultipartUpload.xml is something like:
<CompleteMultipartUpload xmlns='http://s3.amazonaws.com/doc/2006-03-01/'>
<Part>
<PartNumber>1</PartNumber>
<ETag>TBF.zip-51828491-8ff2-49f9-b563-236058500a47/part-1</ETag>
</Part>
<Part>
<PartNumber>2</PartNumber>
<ETag>TBF.zip-51828491-8ff2-49f9-b563-236058500a47/part-2</ETag>
</Part>
</CompleteMultipartUpload>

Any ideas of where the problem is and what I could do to fix it?

Thank you,
Roxana Maurer

James Carr

unread,
Mar 6, 2026, 11:11:28 AM (6 days ago) Mar 6
to pyPreservica
The first thing to try is make sure you are on the latest version of pyPreservica, so run the upgrade command.

Do you get any error messages on the client ? anything like:

raise BadStatusLine(line)
or
Connection aborted.', BadStatusLine('\r\n')  

Reply all
Reply to author
Forward
0 new messages