Wie lösche ich die Datei des Benutzeravatars?

Hallo Team,

meine Website wird in China gehostet. Wie ihr wisst, müssen alle chinesischen Websites eine Lizenz bei der Regierung registrieren, weshalb alle chinesischen Websites unter staatlicher Aufsicht stehen.

Jemand hat kürzlich meinem CDN-Anbieter, Qiniu (ebenfalls ein chinesisches Unternehmen), gemeldet, dass einige Bilder auf meiner Website illegal seien. Mein CDN-Anbieter teilte mir mit, ich solle diese Bilder löschen und den „URL-Cache aktualisieren“, sonst könnten sie meinen Account gemäß den Gesetzen sperren. Ich habe jedoch festgestellt, dass es sich bei diesen Bildern um Benutzer-Avatare handelt, die ich nicht weiß, wie ich löschen soll.

Laut How to Delete Uploaded Files? - #3 by codinghorror und How to Delete Uploaded Files? - #25 by Falco werden hochgeladene Bilder ohne Referenzen automatisch nach 48 Stunden gelöscht. Ich habe diese Benutzer-Avatare durch die Standard-Buchstaben-Avatare ersetzt, aber nach 72 Stunden scheint mit den alten Benutzer-Avataren nichts zu passieren. Vielleicht werden Benutzer-Avatare nicht als hochgeladene Bilder betrachtet?

Habt ihr Ideen, wie ich die Benutzer-Avatar-Dateien vollständig von meinem Server löschen kann?

Vielen Dank im Voraus,
Yinglu

Ich denke, es funktioniert immer noch so.

Aus der URL der Datei, die Sie löschen möchten, den Dateinamen extrahieren.

cd /var/discourse/shared/uploads
find . -name =FILENAME= | xargs exec rm

Anschließend können Sie es von Ihrem CDN entfernen.

Danke für deine Hilfe! Ich habe es versucht, aber es hat nicht funktioniert :frowning:

Die Datei ist https://iosre.com/user_avatar/iosre.com/lincwee/135/5414_2.png, also nehme ich an, der Dateiname ist 5414_2.png, richtig?

Und /uploads befindet sich unter /shared/standalone und nicht unter /shared.
Es gibt keine solche Datei unter /uploads, wie du in der Shell sehen kannst:

root@iosre:/var/discourse/shared# ls
standalone
root@iosre:/var/discourse/shared# cd standalone/
root@iosre:/var/discourse/shared/standalone# ls
backups  postgres_backup  postgres_run  state  uploads
log      postgres_data    redis_data    tmp
root@iosre:/var/discourse/shared/standalone# find . -name 5414_2.png
root@iosre:/var/discourse/shared/standalone# cd uploads/
root@iosre:/var/discourse/shared/standalone/uploads# find . -name 5414_2.png
root@iosre:/var/discourse/shared/standalone/uploads#

Hast du noch weitere Ideen?

Oh, sorry. Avatare funktionieren anders. Ich müsste mir den Code ansehen, um zu verstehen, wo ich suchen muss. Wenn dies ein Notfall ist und Sie ein Budget haben, kontaktieren Sie mich bitte direkt. Andernfalls werde ich wahrscheinlich keine freie Zeit haben, um dies zu untersuchen. Vielleicht weiß jemand anderes Bescheid.

Entschuldigung, das ist eine private Website und ich habe derzeit kein Budget. Trotzdem danke für deine Antwort!

Um zu verhindern, dass Benutzer zukünftige Avatare hochladen, können Sie die Einstellung „Erlaubte hochgeladene Avatare

Etwas wie

a=UserAvatar.where(user_id: 1234)
u=Upload.find(a.custom_upload_id)
upload_url=u.url

Dann

cd /var/discourse/shared/standalone
rm UPLOAD_URL_FROM_ABOVE

Ich habe über 7.000 registrierte Benutzer, und weniger als 5 Benutzer verwenden versehentlich illegale Avatare. Daher möchte ich das nicht als ein einfaches 0-oder-1-Problem behandeln; ich möchte es Fall für Fall lösen, anstatt allen Benutzern die Nutzung benutzerdefinierter Avatare zu untersagen.

Wie mache ich das? Ich habe absolut keine Ahnung.

Zum Beispiel dieses Bild: https://iosre.com/user_avatar/iosre.com/lincwee/135/5414_2.png

snakeninny@bogon ~ % shasum /Users/snakeninny/Desktop/5414_2.png.jpeg 
c8d561c5484a1f197abd32995411caaa25e53bd6  /Users/snakeninny/Desktop/5414_2.png.jpeg
root@iosre:~# cd /var/discourse/shared/standalone
root@iosre:/var/discourse/shared/standalone# find ./ -name *c8d561c5484a1f197abd32995411caaa25e53bd6*
root@iosre:/var/discourse/shared/standalone# 

Kein Erfolg. Meinst du damit das? Und hast du irgendwelche Ideen?

Ist das ein Stück Code? Wo und wie führe ich es aus? Ich war früher iOS-Entwickler und bin mit der Front-End-Programmierung nicht vertraut.

Es ist für die Rails-Konsole. Du gelangst dorthin mit

cd /var/discourse 
./launcher enter app 
rails c

Du kannst exit verwenden, um zu beenden. Und innerhalb des Containers wechselst du mit cd nach /shared statt zum vollständigen Pfad oben.

Für den Benutzer lincwee unter https://iosre.com/user_avatar/iosre.com/lincwee/135/5414_2.png
liefert UserAvatar.where(user_id: 'lincwee') ein leeres Array zurück. Hat jemand eine Idee?

root@iosre:~# cd /var/discourse/shared/
root@iosre:/var/discourse/shared# /var/discourse/launcher enter app 
WARNING: Docker version 17.05.0-ce deprecated, recommend upgrade to 17.06.2 or newer.
root@iosre-app:/var/www/discourse# rails c
[1] pry(main)> a=UserAvatar.where(user_id: 1234)
=> []
[2] pry(main)> a=UserAvatar.where(user_id: lincwee)
NameError: undefined local variable or method `lincwee' for main:Object
from (pry):2:in `__pry__'
[3] pry(main)> a=UserAvatar.where(user_id: 'lincwee')
=> []
[4] pry(main)> 

Du benötigst die ID, nicht den Benutzernamen.

u = User.find_by(username: "lincwee")

Anschließend kannst du die ID einsehen oder über u.id darauf zugreifen.

Danke, es hat bis zu einem gewissen Grad funktioniert. Ich habe im Terminal

cd /var/discourse/shared/
/var/discourse/launcher enter app
rails c

eingegeben und dann den folgenden Code ausgeführt:

uid = User.find_by(username: "user_name").id
user_avatars = UserAvatar.where(user_id: uid)
user_avatar = user_avatars[0]
upload_url = Upload.find(user_avatar.custom_upload_id).url

um alle Avatar-URLs aufzulisten und sie von meinem Server zu löschen.

Ich vermute aber, dass ich das System/den Cache noch weiter aktualisieren muss. Wie sollte ich das machen?

Ich habe eine weitere E-Mail von meinem CDN-Anbieter erhalten, und er hat mein CDN-Konto eingefroren. Daher muss ich diesen Thread für weitere Hilfe aktualisieren.

In der neuen E-Mail hieß es, dass die folgenden Links illegal seien.

https://cdn.iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/baal998/64/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/baal998/75/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/baal998/75/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/baal998/75/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/lincwee/135/5414_2.png
https://cdn.iosre.com/user_avatar/iosre.com/baal998/75/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/lincwee/75/5414_2.png
https://cdn.iosre.com/user_avatar/iosre.com/baal998/96/2210_2.png
https://cdn.iosre.com/user_avatar/iosre.com/lincwee/90/5414_2.png

Wie Sie sehen können, handelt es sich dabei um zwei Benutzer-Avatare, die Memes eines ehemaligen chinesischen Staatspräsidenten zeigen. Der CDN-Anbieter hat mich erneut aufgefordert, diese Dateien vom Server zu löschen und das CDN zu aktualisieren.

Anhand der Links konnte ich erkennen, dass die Benutzer „baal998“ und „lincwee“ waren. Gemäß dem Code-Snippet in meinem letzten Beitrag war die hochgeladene Avatar-URL von „lincwee“ /uploads/default/original/2X/5/55512211b1c8969c8038b79840464952cd3eb089.jpeg, während sie für „baal998“ /uploads/default/original/2X/c/cb2188eaeecc3a648f021fa00da4734bd60ca183.jpg lautete. Ich habe dann find /var/discourse/shared/ -name *55512211b1c8969c8038b79840464952cd3eb089* ausgeführt und alle gefundenen Dateien gelöscht; das funktionierte für „lincwee“. Bei „baal998“ hatte ich jedoch kein Glück; ich konnte immer noch auf https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png zugreifen, obwohl keine Dateien mehr mit dem Namen *cb2188eaeecc3a648f021fa00da4734bd60ca183* vorhanden waren.

Wo zum Teufel ist also https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png auf meinem Server gespeichert? :sob:

Hmm, das ist eine schwierige Situation. Vielleicht könnte @falco oder jemand anderes, der kürzlich an Avataren gearbeitet hat, dir einen Rat geben?

Oder einfacher ausgedrückt: Wie analysiert Discourse einen Besuch auf https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png? Wenn jemand mit dem Quellcode vertraut ist und mir die Quelldatei oder die Klasse/Funktion nennen kann, wäre das wirklich hilfreich. Danke!

Schau im Upload-Modell nach, denke ich.

Zudem starte damit, dass du von deinem Server abrufst, nicht von der CDN. Du möchtest sicherstellen, dass du das Problem am richtigen Ort löst. Sobald du sicher bist, dass der Server die Bilder nicht sendet, kannst du mit der CDN arbeiten.

Da https://cdn.iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png vom CDN stammt,
sollte https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png doch von meinem Server kommen, oder?

Ja, und Sie sehen, dass es von Ihrem Server gesendet wird. Das ist also der Link, den Sie beheben sollten. Nachdem Sie das Senden der Bilder gestoppt haben, können Sie das CDN leeren.