Ich erhalte exakt denselben Fehler wie in dieser Frage, d. h. ich kann JS-Dateien hochladen, nachdem ich sie in den Einstellungen erlaubt habe, aber beim Versuch, sie herunterzuladen, ändert sich die URL im Browser in die URL der JS-Datei und es wird angezeigt: „Die gewünschte Änderung wurde abgelehnt.
Erlauben Sie das Anhängen von *.js-Dateien an Beiträge durch Benutzer? Haben Sie ein berechtigtes Bedürfnis dafür, dass Ihre Benutzer JavaScript-Dateien anhängen? Wir möchten dies vor einem weiteren Vorgehen unbedingt bestätigen.
Vielen Dank für die schnelle Antwort!
Ja, es handelt sich um eine Diskussion zu Fragen und Antworten zum Thema Programmieren, daher ist das Anhängen von *.js-Code-Dateien ein legitimer Anwendungsfall.
Hallo zusammen! Ich habe das gleiche Problem. Wir haben das Hochladen von .js-Dateien erlaubt, aber niemand kann sie herunterladen. Bisher haben wir keine Einstellung gefunden, um dies zu beheben. Kann jemand helfen?
Können Sie den Anwendungsfall beschreiben? Warum ist das notwendig?
Hallo Jeff,
Obwohl kopieren und einfügen wir den Code jetzt im Textbereich des Beitrags.
Anwendungsfall: Wir haben eine .js-Datei mit einem Kickstarter-Code oder einer Lösung für ein wiederkehrendes Problem und möchten sie als Anhang teilen, damit Benutzer sie herunterladen und in ihren Projekten verwenden können.
Wenn wir jedoch die Dateierweiterung von .js in .txt ändern, wird erneut angezeigt: „Die gewünschte Änderung wurde abgelehnt.
Ja; wir müssten einige Browser-Recherchen durchführen, um sicherzustellen, dass die Datei immer auf die Festplatte heruntergeladen und niemals ausgeführt wird.
Wir haben ein Entwicklerforum auf fluiggers.com.br, schau doch mal vorbei… und wir teilen oft .js-Dateien.
Sicher, es gibt viele Sicherheitsprobleme im Zusammenhang mit der Zulassung von JS-Dateien, daher müssen wir dabei äußerste Vorsicht walten lassen.
Der Header Content-Disposition verhindert die Ausführung heruntergeladener JS-Dateien, und wir setzen ihn korrekt:
attachment; filename="test.js"; filename*=UTF-8''test.js
Dies funktioniert bei Uploads auf S3 und sollte auch bei lokalen Uploads funktionieren, aber es scheint eine neue (oder zumindest relativ neue) Sicherheitsmaßnahme von Rails zu geben:
ActionController::InvalidCrossOriginRequest (Sicherheitswarnung: Ein eingebettetes -Tag auf einer anderen Seite hat geschütztes JavaScript angefordert. Wenn Sie wissen, was Sie tun, deaktivieren Sie den Schutz vor Fälschungen für diese Aktion, um die Einbettung von JavaScript über Origins hinweg zu ermöglichen.)
Das sollte lösbar sein…
Ich bin auf dasselbe Problem gestoßen. Wir haben ein Coding-Q/A-Forum und müssen große JS-Dateien zum Download anbieten können.
Ich habe dasselbe Problem in meiner Community. Leute möchten JS-Dateien teilen, aber wenn sie versuchen, sie herunterzuladen, erhalten sie diese Fehlermeldung:
Auszug aus dem Rails-Produktionsprotokoll:
Started GET "/uploads/short-url/qDlrltMxEIJ2aYYdt8lZ200E3wA.js" for 94.31.111.247 at 2025-07-09 05:53:30 +0000
Processing by UploadsController#show_short as JS
Parameters: {"base62"=>"qDlrltMxEIJ2aYYdt8lZ200E3wA", "extension"=>"js"}
Sent file /var/www/discourse/public/uploads/default/original/1X/baab1fc131be960b601467333f5a690b257daeb0.js (0.3ms)
Security warning: an embedded <script> tag on another site requested protected JavaScript. If you know what you're doing, go ahead and disable forgery protection on this action to permit cross-origin JavaScript embedding.
Completed 422 Unprocessable Entity in 17ms (ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.0ms)
JS-Dateien sind in der Liste der zulässigen Upload-Erweiterungen aufgeführt:
Das gleiche Problem hier. Wir haben JS-Dateien, die in unserer eigenen Software ausgeführt werden, nichts, was jemals etwas in einem Browser tun würde.
Wir haben es geschafft, das Discourse-Download-Problem zu beheben, indem wir alle Uploads in einen S3-Bucket verschoben und s3_use_cdn_url_for_all_uploads auf true gesetzt haben. Dies umgeht im Wesentlichen den Short-URL-Controller, der anscheinend der Engpass für JS-Dateien ist.
Im Detail (von meiner KI, die mich dabei begleitet hat):
- S3-kompatiblen Speicher einrichten (z. B. Cloudflare R2)
Discourse kann .js-Dateien nicht sicher vom lokalen Datenträger bereitstellen. Verschieben Sie sie in einen Bucket.
-
Bucket: Erstellen Sie einen privaten Bucket (z. B.
my-discourse-bucket). -
API-Schlüssel: Generieren Sie einen Zugangs- und einen Geheimschlüssel.
2. Eine benutzerdefinierte CDN-Domain konfigurieren
Verbinden Sie in Cloudflare (oder Ihrem Anbieter) eine benutzerdefinierte Domain mit Ihrem Bucket (z. B. cdn.example.com). Dadurch werden Dateien als statische Assets über eine direkte URL bereitgestellt, wodurch die „Sicherheitswache" von Discourse umgangen wird.
3. Discourse-Einstellungen aktualisieren
Konfigurieren Sie in Admin → Einstellungen Ihre S3-Details. Wichtig: Aktivieren Sie Folgendes, um sicherzustellen, dass Discourse nicht versucht, die URLs mit temporären Headern zu „signieren", die Probleme verursachen können:
-
s3_use_cdn_url_for_all_uploads: Aktivieren Sie dieses Kontrollkästchen (Dies ist der wichtigste Schritt). -
s3_cdn_url: Aufhttps://cdn.example.comsetzen. -
s3_region: Verwenden Sieus-east-1(für R2-Kompatibilität).
4. Bestehende Uploads migrieren (optional)
Hinweis: Dies hat bei uns aus unbekannten Gründen nicht funktioniert.
Um alte Links in bestehenden Beiträgen zu beheben, geben Sie Ihren Container ein und führen Sie Folgendes aus:
Bash
# Innerhalb von /var/discourse
./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake
Hoffentlich hilft dies jemandem.

