SquareCloudBlobError
Ogni errore dell’API lancia un SquareCloudBlobError.
Cosa non è un SquareCloudBlobError
- Gli errori di rete non vengono incapsulati. Quando una richiesta non riceve una risposta completa (errore DNS, connessione reimpostata, body troncato durante la lettura), l’errore originale di
fetchviene lanciato così com’è, dopo eventuali retry. - Errori dei file. In Node.js, un percorso di
put()che non può essere aperto lancia un sempliceError(Cannot open file: <path>, errore originale incause). In un browser, un percorso fallisce con l’errore dell’importazione dinode:fs. - Un
@aws-sdk/client-s3mancante.s3()lancia l’errore di importazione del modulo.
UNKNOWN_ERROR
UNKNOWN_ERROR è l’unico codice creato dall’SDK stesso. Viene usato quando la risposta non ha un codice di errore: un body non JSON (ad esempio la pagina di errore di un proxy) o una risposta 2xx senza status: "success". status contiene comunque lo status HTTP reale.
Fallimenti per singolo oggetto
Le operazioni batch riportano i fallimenti nel loro risultato invece di lanciare errori:update(): ogni risultato haok: falsee uncode.delete([ids]): gli oggetti mancanti finiscono innot_found, gli altri fallimenti infailed.
Codici di errore
BlobErrorCode è l’elenco di codici proprio dell’API di Blob Storage. Non è lo stesso elenco dei codici di errore dell’API principale di Square Cloud. Per lo status HTTP e il significato di ogni codice, vedi il riferimento degli errori dell’API Blob.
Globali
Globali
ACCESS_DENIED, RATE_LIMITED, MISSING_SCOPE, RESOURCE_NOT_ALLOWED, UPLOAD_TOKEN_NOT_ALLOWED, UPLOAD_TOKEN_USED, PREFIX_NOT_ALLOWED, PERMISSION_DENIED, ACCOUNT_BLOCKED, UPGRADE_REQUIRED, STORAGE_QUOTA_EXCEEDED, PRIVATE_STORAGE_UNAVAILABLE, PUBLIC_STORAGE_UNAVAILABLE, TOO_MANY_CONCURRENT_UPLOADS, UPLOAD_FAILED, INTERNAL_SERVER_ERROR, NOT_FOUNDRATE_LIMIT è deprecato: il servizio non lo invia più (vedi RATE_LIMITED), ma resta nel tipo.Oggetti
Oggetti
OBJECT_NOT_FOUND, OBJECT_ALREADY_EXISTS, OBJECT_IS_LEGACY, CHECKSUM_MISMATCH, INVALID_CONTENT_TYPE, FILE_TOO_LARGE, FILE_TOO_SMALL, BLOCKED_FILE_TYPE, INVALID_FILE_TYPE, FILE_TYPE_NOT_ALLOWED, NOTHING_TO_UPDATE, VISIBILITY_CHANGE_FAILED, UPDATE_FAILED, DELETE_FAILED, TOO_MANY_OBJECTS, SAME_OBJECT, INVALID_DESTINATION, COPY_FAILED, PREFIX_REQUIRED, INVALID_CONTINUATION_TOKENUpload multipart (a blocchi)
Upload multipart (a blocchi)
TOO_MANY_CONCURRENT_CHUNKS, TOO_MANY_OPEN_UPLOADS, INVALID_UPLOAD_TOKEN, UPLOAD_NOT_FOUND, NO_CHUNKS_UPLOADED, EMPTY_CHUNK, INVALID_CHUNK_PART, CHUNK_TOO_SMALL, CHUNK_TOO_LARGERegole, token di upload, condivisioni e S3
Regole, token di upload, condivisioni e S3
TOO_MANY_RULES, DUPLICATE_RULE_PREFIX, INVALID_RULES, UPLOAD_TOKEN_TOO_LARGE, TOO_MANY_SHARES, SHARE_NOT_FOUND, INVALID_SHARE, API_KEY_REQUIRED, LEGACY_API_KEYValidazione (400)
Validazione (400)
Qualsiasi codice
INVALID_*, come INVALID_OBJECT, INVALID_OBJECT_NAME o INVALID_RULE_PREFIX. Gli errori delle regole riportano il prefix responsabile in error.extra.SDK
SDK
UNKNOWN_ERROR: la risposta non aveva un codice di errore (vedi sopra).BlobErrorCode accetta anche qualsiasi altra stringa, così un codice aggiunto in futuro dal servizio supera comunque il controllo dei tipi.
Politica di retry
L’SDK ripete solo ciò che è sicuro ripetere: le chiamateGET e le parti degli upload multipart (ogni numero di parte può essere inviato di nuovo).
Una chiamata ripetibile viene ripetuta in caso di:
- un errore di rete (incluso un body troncato durante la lettura);
- qualsiasi risposta
5xx; TOO_MANY_CONCURRENT_CHUNKSsu una parte multipart: il server rifiuta la parte prima di leggerla, quindi viene inviata di nuovo entro lo stesso budget.
4xx, incluso 429. RATE_LIMITED può essere un blocco dell’account che dura circa 30 minuti, quindi l’SDK lascia la decisione a te.
Backoff
Prima del retryn (a partire da 0), l’SDK attende:
maxRetries: 2, una chiamata effettua al massimo 3 tentativi.
Ripetere tu le scritture
Una scrittura che fallisce con un errore di rete o un5xx potrebbe essere stata applicata oppure no. Ripetila solo quando per te è sicuro farlo, ad esempio un put() sullo stesso name con overwrite: true.
Timeout
Non esiste un timeout del client né un modo per annullare una chiamata: una richiesta dura quantofetch attende.
