Sto eseguendo l’ultima versione beta e ho abilitato S3 per gestire i file caricati.
I caricamenti nei post funzionano correttamente (il file viene caricato su S3 e visualizzato nel post), ma ora noto che il tentativo di caricare foto profilo genera errori “Access Denied” nell’interfaccia utente. Non ci sono voci nel registro degli errori dell’amministratore.
Alcuni dei miei primi utenti sembrano essere riusciti a caricare immagini avatar, ma queste sono archiviate localmente, ad esempio guardando il codice sorgente:
Per caso stai usando Cloudflare? Credo che le immagini dei profili siano effettivamente archiviate su S3, ma vengano inoltrate tramite il tuo server. Ho risolto un problema simile a questo (tutte le avatar caricate che apparivano vuote): ho dovuto aggiungere l’indirizzo IP del server alla whitelist di Cloudflare per risolverlo.
Grazie, ma no, non sto usando una CDN — sto solo usando S3 standard ma con media sicuri. Non sono sicuro di come verificare se le richieste vengono proxyate, ma ecco l’output dell’intestazione curl:
Questo mi fa pensare che non sia proxyata, ma non ne so abbastanza per esserne certo…
Quella struttura di URL è coerente con un avatar proxy, il che è confuso (l’implementazione degli URL degli avatar qui su Meta è diversa rispetto alle istanze standard di Discourse). Dalle informazioni fornite dall’output di curl non riesco a capire se ci sia qualcosa che escluda che Discourse stia facendo il proxy degli avatar (non sono un esperto).
Dalla mia esperienza passata, se le immagini dei post vengono caricate su S3, anche gli avatar lo sono, a meno di non fare qualcosa di molto personalizzato. Non ho mai provato il caricamento sicuro dei media o l’uso di S3 senza una CDN, quindi questi fattori potrebbero fare una differenza significativa.
Sarebbe utile provare a caricare un nuovo avatar e verificare se riesci a trovare il file nel tuo archivio locale o nel bucket S3.
La mia ipotesi è che qualcosa del tipo: l’indirizzo IP del server debba essere inserito nella whitelist di S3. Non sono un esperto, speriamo che qualcun altro possa intervenire.
Il problema è che gli upload su S3 funzionano per i post, ma non per gli upload delle immagini degli avatar. Il mio sospetto è che gli unici utenti che hanno un avatar siano quelli che hanno caricato le immagini prima della configurazione di S3, ma non posso confermarlo.
Ho avuto un problema simile: le immagini dei post funzionavano, ma quelle del profilo non venivano visualizzate. I caricamenti su S3 avvenivano correttamente per entrambi, ma c’era un problema nella visualizzazione (l’indirizzo IP del server era limitato/bloccato).
Posso confermare che quando provo a caricare un avatar, la barra di avanzamento si aggiorna e arriva al 100%, ma solo allora compare il messaggio “Errore: Accesso negato”.
Controllando la console JS, ricevo l’errore:
https://discourse.psy.plymouth.ac.uk/uploads.json?client_id=0a2569993a6b43d6b5f8c60fdd2c913e
Impossibile caricare la risorsa: il server ha risposto con uno stato 422 ()
E se seguo quell’URL:
{"errors":["L'URL o la risorsa richiesta non è stata trovata."],"error_type":"not_found"}
Controllando il bucket S3, nulla è arrivato nella cartella ‘Originals’.
Questo è in contrasto con quanto accade quando carico un’immagine in un post: in quel caso tutto funziona correttamente, l’immagine appare nel bucket S3 ed viene anche ridimensionata/ottimizzata.
Lo stato HTTP 422 corrisponde apparentemente a “unprocessable entity”. Questo suggerisce che Discourse non accetta il caricamento per qualche motivo, ma potrebbe trattarsi di qualcos’altro: penso che il 422 significhi semplicemente che la richiesta è stata formattata correttamente, ma c’è qualcosa di errato all’interno della richiesta stessa.
L’immagine che stai cercando di caricare è di un tipo insolito o forse è un’immagine di dimensioni enormi?
Hai provato a includere esattamente quel file immagine in un post?
L’avatar (per impostazione predefinita) viene ridimensionato in diverse dimensioni, quindi potrebbe essere lì che si verifica l’errore, ad esempio raggiungendo un limite di memoria se l’immagine è molto grande. Tuttavia, si tratta per lo più di un’ipotesi.
Non mi aspetterei di vedere un 422 da parte di S3 e non è elencato tra le risposte di errore nel loro riferimento API; quindi, penso che il problema si verifichi in Discourse prima che venga tentato il caricamento su S3.
È sicuramente qualcosa legato alla gestione delle immagini degli avatar. Ho appena riprovato con la stessa immagine (questa volta usando il client mobile iOS) e l’upload funziona correttamente all’interno di un post, ma restituisce lo stesso errore di accesso negato quando uso la stessa immagine come avatar.
Qualcun altro che utilizza S3 con media sicuri riesce a replicare l’errore? Potrebbe dipendere dai permessi del bucket, dato che l’upload per un post funziona?