Ciao a tutti,
avrei bisogno sto utilizzando le HTTP API di transfernow (https://developers.transfernow.net/) per implementare una applicazione in Python che permetta di fare upload di file e poi memorizzare il link
per il download delle risorse.
La domanda riguarda in dettaglio come gestire correttamente la request in Python fornendo la corretta dimensione di un file.
Il problema è il seguente, le API richiedono:
1) inizialmente di effettuare una HTTP POST (https://developers.transfernow.net/#create-a-new-transfer) tra cui viene indicato la size del file,
2) successivamente nel workflow ci sono diverse chiamate,
3) poi c'è un API per l'effettivo upload del file (https://developers.transfernow.net/#file-parts-upload),
4) succevviamente il completamento dell'upload (https://developers.transfernow.net/#complete-transfer-upload).
Un esempio molto semplice, creo un file ASCII con la semplice scritta: hello.
Se calcolo la dimension di questo file, es:
os.stat(file_path).st_size ottengo come dimensione 5 e questa size viene passata nella chiamata al punto 1
Poi al punto 3, eseguo l'effettivo upload del file, ad esempio cosi:
files = {
"resource": (file_name, open(file_path, "rb"), mimetype)
}
response = requests.request("PUT", upload_url, files=files)
tracciando la request ho ad esempio:
< Content-Length: 180
< Content-Type: multipart/form-data; boundary=08fc9fa3aa6283a9ffa2f46d6b8ad13d
<
< --08fc9fa3aa6283a9ffa2f46d6b8ad13d
Content-Disposition: form-data; name="resource"; filename="file1.txt"
Content-Type: text/plain
hello
--08fc9fa3aa6283a9ffa2f46d6b8ad13d--
il problema è il Content-Length: 180 perchè allo step 4 poi ricevo il seguente errore:
{"error":"File GpjwR4un does not have the right size in s3 (provided: 5, actual: 180","codes":[]}
Sapete come è possibile risolvere questo problema? Penso sia impossibile calcolare la size al punto 1 in 180 come fosse una chiamata http. Penso che bisogna agire
al punto 3 in modo da passare il file con dimensione 5...però non saprei come fare.
Ciao