Il codice di identificazione dell'upload restrittivo rende difficile scrivere componenti del tema che utilizzano risorse caricate

Ciao a tutti,

Recentemente ho scritto un componente tema di Discourse (GitHub - Beholder-Vision/discourse-insert-model-3d: A Discourse theme component for adding 3D models to topics) che consente agli amministratori di Discourse di abilitare il caricamento e la visualizzazione di modelli 3D sui loro forum.

All’inizio sembrava funzionare bene finché non ho ricevuto una segnalazione che alcuni modelli caricati erano scomparsi, e poi controllando il mio forum ho visto che anche gli asset caricati (modelli 3D e immagini di anteprima) erano stati eliminati Insert Model 3D - #2 by patrickemin.

Leggendo la documentazione (Understanding Uploads, Images, and Attachments), avevo presunto che gli asset caricati sarebbero stati a posto perché referenziati da un post, ma dopo aver approfondito, ho trovato questo codice, discourse/app/models/post.rb at 03bb43f7468d3aa6e73bba0805193ae50c7ec2d5 · discourse/discourse · GitHub che sembra fare il lavoro di identificare gli upload sul server. Da quello che ho capito, un file caricato viene conteggiato come referenziato da un post solo se è referenziato da uno di un numero limitato di tag HTML. Quindi un upload collegato verrà riconosciuto se referenziato dall’attributo href di un elemento <a> ma non se è referenziato dall’attributo src di un elemento <model-viewer> (che è ciò che aggiunge il mio nuovo componente tema).

Qualcuno che ha familiarità con quel codice può confermare se la mia comprensione qui è corretta o meno? Se è corretta, penso che le persone che creano componenti tema possano contrassegnare gli asset come upload generando un link <a> nascosto che fa riferimento all’asset, ma sarebbe molto utile se la documentazione (Understanding Uploads, Images, and Attachments) potesse essere aggiornata per evidenziare questo tranello.

Molte grazie
Alan

3 Mi Piace

I tuoi parametri e src provengono da un’analisi JSON, quindi farlo automaticamente sembra complicato (a dir poco).

Ritengo che, a livello fondamentale, questo richieda all’API di “collegare permanentemente” un caricamento a un post e contrassegnarlo in modo che non venga mai eliminato.

Questo tipo di operazione apre le porte ad altri problemi (dove posso vedere quali caricamenti sono collegati permanentemente? Quali sono i limiti?).

Detto questo, il collegamento permanente sembra l’unico modo pulito per risolvere questo problema.

Un link nascosto funzionerà effettivamente come soluzione temporanea.

Sto spostando questo in una richiesta di funzionalità perché sta funzionando come previsto, ma l’API non ti sta rendendo la vita facile qui.

Segnalerò il team dev-xp, che potrebbe avere altre idee al riguardo.