IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Comment passer des headers http ?


Sujet :

Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 191
    Points
    191
    Par défaut Comment passer des headers http ?
    Bonjour

    J'utilise le portail 10.1.4, et je developpe en PL/SQL. J'ai commencé à developper une petite gallerie d'images. Les images sont stockées dans des champs blobs d'une table. Lorsque l'image est dans un format compatible web, je peux tout simplement l'afficher en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <img src=http://...../ma_proc?p_image=....>
     
    et ma procédure qui affiche le blob est : 
    SELECT ... INTO l_img_std, l_mime_std
    FROM imgal_image
    WHERE ...;
     
    OWA_UTIL.mime_header (l_mime_std, FALSE);
    OWA_UTIL.http_header_close;
    WPG_DOCLOAD.download_file (l_img_std);
    Jusque là, tout va bien. Là ou ca se complique, c'est quand mon utilisateur charge un EPS dans la base. Faute de pouvoir le lui afficher dans une page, je dois au moins lui permettre de le télécharger. Et là j'ai un peu de mal. En effet je peux faire un lien du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href=http://ma_proc?p_image=....>
    et ce lien permet de télécharger l'image, mais ... le format EPS n'est pas proposé à l'enregistrement. Par défaut, la boite de dialogue pour enregistrer le fichier propose un fichier de nom "ma_proc" (ce qui n'est pas terrible en soi, mais admettons) mais surtout sans extension. Je souhaite donc corriger cela. Est ce que quelqu'un a une idée ?

    J'ai trouvé du code PHP de qqu'un qui voulait forcer le téléchargement d'un fichier via un lien (meme pour un type mime reconnu) et sa solution consistait à modifier détailler les headers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    header("Content-disposition: attachment; filename=$file");
    header("Content-Type: application/force-download");
    header("Content-Transfer-Encoding: image/jpeg\n");
    header("Content-Length: ".filesize($file));
    header("Pragma: no-cache");
    header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public");
    header("Expires: 0");
    J'aimerais essayer la même chose pour voir mais je n'ai pas trouvé de procédure équivalente en PL/SQL. Si j'écris betement le texte avec un htp.p je n'obtiens plus de téléchargement mais le contenu du blob qui s'affiche en texte sur la page, comme si le header n'était donc pas bon.

    A moins qu'une autre approche soit préférable...

    En aparté, si qqu'un savait aussi s'il est possible de forcer le nom du fichier à enregistrer par défaut (pour éviter le nom de ma proc) ca serait un plus.

    Merci beaucoup

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Tu as regardé sur la doc oracle concernant le load direct de blob ?

    http://download-uk.oracle.com/docs/c...pt.htm#1006085

    Il semblerais que tu n'ai pas mis la longueur dans l'entete:

    htp.p('Content-Length: ' || dbms_lob.getlength(myblob));
    Par contre il faudrait que tu t'assure que tu a le bon type mime dans ta variable l_mime_std. Car l'erreur que tu décrit veux dire que l'explorateur ne reconnais pas ce type, et donc propose le traitement par défaut qui est d'enregistrer le fichier sur disque.

    Sinon, il semblerait que tu puisse t'en sortir avec la fonction print du package HTP, puisque tu mets ce que tu veux y compris l'équivalent de ce que tu as trouvé en PHP.

    http://download-uk.oracle.com/docs/c...tp.htm#1058737

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 191
    Points
    191
    Par défaut
    Bonjour Rémy
    Effectivement, j'avais oublié le content-length, je l'ai rajouté, ceci dit (coup de bol) ca marchait qd meme cad qu'il me propose bien un fichier a telecharger, et il est correct apres enregistrement.

    Comme je disais, j'ai essayé de faire des htp.p des headers que j'ai trouvé, mais ca n'a pas l'air de marcher, je recois le contenu du blob au format text/html.

    La valeur de l_mime_std est ok , par exemple "image/jpeg", c'est le formulaire intégré à Portal qui remplit lui-meme ce champ. Par contre pour un fichier EPS il me met "application/postscript", je ne sais pas si c'est correct. j'ai essayé en forcant la valeur (comme dans l'exemple php) à "application/octetstream", sans plus de succès...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 191
    Points
    191
    Par défaut
    Areuh

    je viens de comprend d'ou vient le probleme : apparemment, le header "content-type" doit absolument etre passé avant le "content-disposition".

    J'pensais qu'on pouvait balancer les headers dans l'ordre qu'on voulait ...

    a+
    Loko

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par Loko
    Areuh

    je viens de comprend d'ou vient le probleme : apparemment, le header "content-type" doit absolument etre passé avant le "content-disposition".

    J'pensais qu'on pouvait balancer les headers dans l'ordre qu'on voulait ...

    a+
    Loko
    Ok, merci d'avoir donné la solution, j'avoue que je séchait complètement... en fait ce n'est pas un problème d'oracle mais d'explorateur internet, car c'est lui qui interprète les header http et en fonction, il effectue une action ou une autre....

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 191
    Points
    191
    Par défaut
    Salut

    oui, effectivement ce n'est pas un probleme Oracle mais purement HTTP, ceci dit je ne le savais pas quand j'ai ouvert ce nouveau fil.

    A bientot
    A.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment passer des paramètre a OpenRecordset
    Par molarisapa dans le forum Access
    Réponses: 2
    Dernier message: 09/03/2006, 18h14
  2. Comment passer des argument a un script php ?
    Par Florina dans le forum Linux
    Réponses: 2
    Dernier message: 11/12/2005, 15h38
  3. [script SQL]comment passer des parametres a un scrip sql?
    Par la7su dans le forum Langage SQL
    Réponses: 5
    Dernier message: 23/03/2005, 11h55
  4. Réponses: 7
    Dernier message: 30/12/2004, 13h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo