Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

Problem bei Anzeige von hochgeladenen Bildern mit private download und file_create_url (nur Platzhalter-Anzeige)

Eingetragen von tashinoz (21)
am 25.11.2008 - 01:03 Uhr in
  • Allgemeines zu Drupal
  • Drupal 5.x

Hi,

ich habe Probleme bei der Anzeige von Bildern, die von Benutzern hochgeladen wurden. Anstelle der Bilder werden nur Platzhalter angezeigt. Ich verlinke auf die Bilder mittels file_create_url().

Background: Ich habe einige Drupal Module geschrieben, die Anwendern erlauben Dateien hochzuladen, u.a. Bilder. Da diese Dateien nur fuer angemeldete Benutzer zugaenglich sein sollen, steht die download method auf 'private' und das Verzeichnis ist ausserhalb der ueber das Web zugaenglichen Ordner.
Der Ordner hat die Rechte 777.

Fuer den Upload der Dateien verwende ich file_save_upload(), kein existierendes Drupal Modul.

Ich kann die Dateien problemlos uber file_create_path() erreichen. Das verwende ich z.B. um die Groesse der dargestellten Bilder zu manipulieren und die Platzhalter haben die korrekt berechnete Bildgroesse.

Ich benutze file_create_url() um auf die Bilder zu verweisen. Die erstellten URLs scheinen korrekt zu sein, da sie auf den 'dummy' Folder verweisen - wie bei private method ueblich, z.B. in der Form: http://www.mysite.com/mytest/system/files/images/events/example.jpg. (wobei 'mytest' der Name meiner Drupal-Installation ist)

Allerdings werden nur die Platzhalter angezeigt, nicht die Bilder.

Weiss jemand Rat? Ich habe schon zig Foren etc durchsucht, aber kein entsprechendes Problem / Loesung gefunden.

Entwicklungsumgebung:
Drupal 5.12
PHP 5.2.5
Linux server bei hosting company mit Apache 1.3.37

Vielen Dank schon mal,
Natascha

‹ Eingabeformat bei Kommentarfunktion Bilder Gallerie ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Platzhalter von file_create_url()

Eingetragen von narres (348)
am 25.11.2008 - 08:01 Uhr

Ich muss mal ganz dumm fragen: Der Platzhalter von file_create_url() verweist auf den richtigen Pfad?
Mit Platzhalter meinst Du die URL auf das Bild?

Wenn ja, dann fehlt Dir einfach ein

<?php
<img src='".file_create_url()."' />
?>

drumherum?

---
~ http://drupalcamp.de/

  • Anmelden oder Registrieren um Kommentare zu schreiben

img tag ist da

Eingetragen von tashinoz (21)
am 25.11.2008 - 09:17 Uhr

Mit Platzhalter meine ich den Kasten mit dem roten 'x' in der Ecke (hat das eigentlich einen Namen?).

Das Bild ist als img tag eingebunden in der Form:
<img src='http://www.mysite.com/mytest/system/files/images/events/example.jpg' >

Dabei wird der Pfad von file_create_url erstellt. 'system/files' verweist auf das Drupal file upload directory.
Ich habe mich and die "file download Bibel" '10 things to know about file download in Drupal' von Caroline Hill gehalten. Laut dem Dokument erstellt file_create_url() diesen Link, der an sich so nicht existiert (sog. 'smoke screen'). Daher kann er von einem Browser nicht aufgerufen werden, AUSSER der Aufruf erfolgt durch Drupal und authentifizierte User (da download method auf 'private' steht).

Allerdings sehe ich ausser dem Platzhalter leider nix, seufz.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wir kommen der Sache

Eingetragen von narres (348)
am 25.11.2008 - 09:31 Uhr

Wir kommen der Sache näher.

Kannst Du denn die Grafik "http://www.mysite.com/mytest/system/files/images/events/example.jpg" im Browser direkt aufrufen?
Das geht schon. Du musst halt nur die richtigen Rechte haben. Bei den Rechten vermute ich jetzt auch Dein eigentliches Problem.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Sorry, this page doesn't exist anymore...

Eingetragen von tashinoz (21)
am 25.11.2008 - 09:49 Uhr

Nope, wenn ich den Link direkt im Browser eingebe, bekomme ich die Drupal-Anzeige "Sorry, this page doesn't exist anymore."
Die Ordner-Rechte stehen auf 777. Gibt es noch andere Rechte, die ich einstellen muesste?

(Vielen Dank uebrigens, dass Du Dir die Zeit nimmst!)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nee, pass auf :) Die

Eingetragen von narres (348)
am 25.11.2008 - 10:45 Uhr

Nee, pass auf :)

Die "Ordner-Rechte stehen auf 777" ist relativ gleich, da es eh durch ein Modul (system) geschleust wird. Dein Webserver brauch da halt nur Zugriff drauf.

Mal ein Beispiel:
Die http://www.drupal-initiative.de/system/files/shraum2.jpg darfst Du nicht sehen, da der Node dahinter für Dich auch nicht sichtbar ist.
Das http://www.drupal-initiative.de/system/files/DrupalCamp-CGN-200x60.gif allerdings schon, da dies zum http://www.drupal-initiative.de/node/82 gehört.

In Wirklichkeit liegen die Dateien sowieso nicht unter ".../system/files/..." sondern in Deinem echten Files-Verzeichnis. Bei Dir wahrscheinlich unter "files/images/events/".
Du müsstest als erstes mal überprüfen, ob die Grafik da wirklich existiert. Also im Pfad ohne das ".../system/..." dazwischen. "system" ist nur da Modul, welches sich um die Rechte kümmert.

Mit Rechten meinte ich "admin/user/permissions". Das "view uploaded files" musst Du schon dürfen ;)

Oh man. Umständlich erklärt :)

~ http://drupalcamp.de/

  • Anmelden oder Registrieren um Kommentare zu schreiben

ja, ja, schon klar... :-)

Eingetragen von tashinoz (21)
am 25.11.2008 - 11:18 Uhr

ja, ja, schon klar (und gar nicht umstaendlich erklaert)... :-)

Da ich den Download auf 'private' gestellt habe, liegen meine Files nicht auf einem Web-zugaenglichen Verzeichnis, stattdessen auf dem Apache-Server in einem Verzeichnis parallel zum www-Verzeichnis. Meine Einstellung in Drupal fuer das Verzeichnis lautet entsprechend: "../../mytestfiles".
Sehen kann ich die Dateien und mit file_create_path() (das ../../mytestfiles verwendet) kann ich auch problemlos darauf zugreifen, denn die Platzhalter haben ja unterschiedliche Groessen (die ich anhand der Info geliefert mit Zugriff ueber file_create_path() errechne).

'view uploaded files' duerfen bei mir alle ausser 'anonymous users'.

Hmmm.... gruebel....

  • Anmelden oder Registrieren um Kommentare zu schreiben

Tja, Grübel. Jetzt haben

Eingetragen von narres (348)
am 25.11.2008 - 11:32 Uhr

Tja, Grübel. Jetzt haben wir zumindest eine Menge an Möglichkeiten ausgeschlossen.

Noch eine Frage: Du hast nicht zufällig Leerzeichen oder Umlaute mit drin? Das geht nämlich schief.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nur alphanumerisch und Underscores

Eingetragen von tashinoz (21)
am 25.11.2008 - 12:32 Uhr

Nope, keine Sonderzeichen oder Umlaute, nur alphanumerisch und Underscores.
Vielen Dank auf jeden Fall fuer's Brainstorming.

*sigh*

  • Anmelden oder Registrieren um Kommentare zu schreiben

Mal Step by Step

Eingetragen von narres (348)
am 25.11.2008 - 14:29 Uhr

Um mich da ranzutasten, wo das denn passiert:

Standard-Installation:
- Seh zu, dass die Files in /sites/mysite/files liegen (oder so. Auf jeden Fall irgendwo im Web-Zugriff)
- Schalte Private-Download auf OFF
- Schau was passiert (Files sollten da sein)

Dann schaltest Du
- Private auf ON
- Nachschauen
- und schiebst Deine Files dahin wo sie hinsollen
- Nachschauen

Dazwischen immer schön schauen und drauf achten, dass der Browsercache auch leer ist.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Puh - geschafft !

Eingetragen von tashinoz (21)
am 25.11.2008 - 23:42 Uhr

Ok, ich hab's gefunden - eine schwere Geburt:

Das eigentliche Problem: Da ich auf keine existierende Funktion eines Drupal upload modules zugreife, sondern file_save_upload() benutze, weiss die Drupal Datenbank nichts ueber meine Uploads - und zeigt die Bilder auch nicht an (Stichwort: broken image icon).

Loesung: Ein File kann nicht runtergeladen werden - oder in meinem Fall als Bild angezeigt werden - wenn Drupal nichts von der Datei weiss. Daher muss ich einen hook file_download in meinem custom module erstellen, der den Header der Datei zurueckliefert, so dass Drupal Kenntnis davon hat. Der eingefuegte Quellcode lautet:

function mymodule_file_download($file) {
   if (!user_access('view uploaded files')) { return; }
   $filepath = file_create_path($file);
   $imageInfo = image_get_info($filepath);
   $name = mime_header_encode(basename($file));
   $size = $imageInfo['file_size'];
   $type = mime_header_encode($imageInfo['mime_type']);
   return array('Content-Type: '.$type.'; name='.$name.'Content-Length: '.$size);
}

Ta-ta - die Bilder werden angezeigt.

Ich bin auf die Loesung gestossen, nachdem ich mir die Dokumentation in File downloads in Drupal nochmals und nochmals durchgelesen habe, und es bei Kapitel 3 endlich *klick* gemacht hat. Das Dokument kann man uebrigens nach genehmigter Registrierung hier runterladen: http://11heavens.com/files-in-Drupal. Sehr empfehlenswert!

Sorry, narres, dass ich Dir die Muehe gemacht habe, aber super vielen Dank dafuer !!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja, ja, dies macht Sinn

Eingetragen von narres (348)
am 26.11.2008 - 08:43 Uhr

Ja, ja, dies macht Sinn :)

Ist aber ja ein netter Thread geworden: Wie mach ich es in mehr Steps als nötig.
Dafür aber recht vollständig.

Nix zu danken. Drupal heißt auch eben auch zusammenhalten (Community plumbing).

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 7 Wochen 4 Stunden
  • Hey danke
    vor 7 Wochen 22 Stunden
  • Update: jetzt gibt's ein
    vor 7 Wochen 1 Tag
  • Hallo, im Prinzip habe ich
    vor 7 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 7 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 8 Wochen 3 Tagen
  • In der entsprechenden View
    vor 8 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 8 Wochen 3 Tagen
  • gelöst
    vor 11 Wochen 1 Stunde
  • Ja natürlich. Dass ist etwas,
    vor 11 Wochen 23 Stunden

Statistik

Beiträge im Forum: 250233
Registrierte User: 20460

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 14 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association