[http / oracle] Probleem met downloaden bestand.

Pagina: 1
Acties:

  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 15:50

mkleinman

8kWp, WPB, ELGA 6

Topicstarter
Ik probeer vanuit mijn database (Oracle) een bestand te streamen (ook vanuit de database) naar de eindgebruiker.

Dit werkt prima alleen heb ik een probleem met de naam van het bestand. Deze krijgt namelijk de naam van mijn package en de extentie van mijn procedure.

Is er een manier om in de mimeheader op te geven wat de naam van het bestand is?

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


  • Juup
  • Registratie: Februari 2000
  • Niet online
Probeer dit eens aan je header toe te voegen:
code:
1
Content-Disposition: attachment; filename=blaat.txt

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 15:50

mkleinman

8kWp, WPB, ELGA 6

Topicstarter
Werkt helaas niet :( Ik had zoiets al geprobeerd. Dit is btw de code waarover het gaat

-- daadwerkelijke streaming naar de client
owa_util.mime_header( 'Content-Type: application/zip; Content-Disposition: attachment; filename=test.zip', FALSE );
owa_util.http_header_close;

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

de MIME header is ook iets anders dan een een HTTP header... laat eens zien welke headers je app nu daadwerkelijk verstuurt? (bv. via telnet)

Klaar voor een nieuwe uitdaging.


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Hier staat de oplossing (als je iAS9 gebruikt).

knipje code daaruit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
create or replace Procedure PROCESS_DOWNLOAD 
IS v_filename varchar2(255); 

BEGIN 
v_filename := LTRIM(owa_util.get_cgi_env('PATH_INFO), '/'); 

select name into v_filename 
FROM www_document 
WHERE UPPER(name) = UPPER(v_filename); 
wpg_docload.download_file(v_filename); 

END PROCESS_DOWNLOAD;

Als commentaar erbij staat nog:
This is also stated in the "Oracle 9i Application Server Using the PL/SQL Gateway Release 1 (v1.0.2.2)" in section 1.7.8 "File Download".

Who is John Galt?


  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 15:50

mkleinman

8kWp, WPB, ELGA 6

Topicstarter
SUPER! thanx!

dat gaan we proberen!

en inderdaad we gebruiken Ias9i

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 13 maart 2002 12:45 schreef justmental het volgende:
Hier staat de oplossing (als je iAS9 gebruikt).
Waarom kan je daar niet gewoon met je otn login in? :{
knipje code daaruit:
Is dat voor downloaden NAAR je server toe, of voor het uploaden VAN je server af?

[edit]
Ja dus :)

Verwijderd

Op woensdag 13 maart 2002 12:51 schreef ACM het volgende:

[..]

Waarom kan je daar niet gewoon met je otn login in? :{
[..]
voor metalink moet je een support contract hebben

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 13 maart 2002 12:52 schreef sjako het volgende:
voor metalink moet je een support contract hebben
Ah, ok...

Lekker handig om daar een link naar te plaatsen hier dan ;)

Verwijderd

Op woensdag 13 maart 2002 12:53 schreef ACM het volgende:

[..]

Ah, ok...

Lekker handig om daar een link naar te plaatsen hier dan ;)
mja, meeste mensen die met oracle werken hebben een support contract (zit bij de prijs in)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 13 maart 2002 12:56 schreef sjako het volgende:
mja, meeste mensen die met oracle werken hebben een support contract (zit bij de prijs in)
Ja maar, ik niet... :{

Niet dat ik het dan ook zoveel gebruik (niet eens geinstalleerd hier thuis), maar is toch vaak wel interessant om dat soort uitleg te bekijken.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op woensdag 13 maart 2002 12:53 schreef ACM het volgende:
Ah, ok...

Lekker handig om daar een link naar te plaatsen hier dan ;)
:P
Als ik het hele stuk ge-c/p-ed had hierheen vind Oracle dat waarschijnlijk weer niet leuk.

Who is John Galt?


  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 15:50

mkleinman

8kWp, WPB, ELGA 6

Topicstarter
Deze oplossing gaat voor mij btw niet op :-(

ik heb een file in de db staan die gedownload wordt..

en de wpg_docdownload is voor bestanden op de webserver en niet in db.

ik heb wel een oplossing maar om nu te zeggen dat ik daar zo blij mee ben Nee.

ik roep een download procedure aan die dynamisch een package aanmaakt met execute immediate (package naam = bestandsnaam) en 1 procedure die als naam de extentie van het te downloaden bestand heeft.

via een redirect_url roep ik deze zojuist aangemaakte procedure aan. et voila bestandsnaam staat goed.

alleen heb ik gaandeweg nog steeds problemen met het genereren van de package, soms maaktie m wel aan, vaak niet (terwijl de code correct is en werkt (als ik m statisch maak)

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


Verwijderd

even algemeen

voor database [Oracle] gerelateerde zaken is AskTom een goede maar relatief onbekende plek om info te zoeken.
Tom kan het helder en praktisch uitleggen.

  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 15:50

mkleinman

8kWp, WPB, ELGA 6

Topicstarter
Ik heb de oplossing

ipv owa_util.mime_header te gebruiken doe ik het nu zo :

htp.prn('Content-type: application/zip'|| chr(13) );
htp.prn('Content-disposition: filename=d'|| p_dienstnummer ||'.html'||chr(13) );

owa_util.http_header_close;

dit werkt perfect !

thnx all!

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

edit:
Ik moet niet wat anders gaan doen als ik nog wat aan het typen ben :o

Who is John Galt?


  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 15:50

mkleinman

8kWp, WPB, ELGA 6

Topicstarter
Hmm probleem nr 2.

bestandsnaam is nu netjes, bestand blijft leeg. |:(

aargh!

0 bytes steeds

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op woensdag 13 maart 2002 13:45 schreef mkleinman64 het volgende:
Hmm probleem nr 2.

bestandsnaam is nu netjes, bestand blijft leeg. |:(

aargh!

0 bytes steeds
Toon uw code :)

Who is John Galt?


  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 15:50

mkleinman

8kWp, WPB, ELGA 6

Topicstarter
htp.prn('Content-Type: application/zip' || chr(13) );
htp.prn('Content-Disposition: filename=d' || to_char( p_dienstnummer ) ||'.zip' || chr(13) );
owa_util.http_header_close;

BEGIN
LOOP
dbms_lob.read( l_data, l_amt, l_off, l_raw );
htp.prn( l_raw );
l_off := l_off + l_amt;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
END;

khoop dat het een beetje te lezen valt

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op woensdag 13 maart 2002 13:50 schreef mkleinman64 z'n code:
Je komt niet meer uit de loop :)
Je moet eerst de length opvragen met dbms_lob.getlength en de loop uitgaan na het einde van het bestand.

Een voorbeeldje van mezelf:
code:
1
2
3
4
5
6
7
8
9
  v_len := dbms_lob.getlength(v_ico_file);
  owa_util.mime_header (v_mime_type, FALSE);
  owa_util.http_header_close;
  while v_offset < v_len
  loop
    dbms_lob.read(v_ico_file,v_buf_size,v_offset,v_buffer);
    htp.prn (utl_raw.cast_to_varchar2(v_buffer));
    v_offset := v_offset+v_buf_size;
  end loop;

Who is John Galt?


  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 15:50

mkleinman

8kWp, WPB, ELGA 6

Topicstarter
Je komt wel uit die loop, want als je meer data selecteerd uit een lob dan er in zit krijg je een no data found exceptie en daar klapt hij uit de loop.

oplossing is ook al gevonden btw

me mimeheaders kloptten niet.

-- daadwerkelijke streaming naar de client
owa_util.mime_header( 'Content-Type: application/zip'|| chr(13) ||'Content-Disposition: filename=d' || to_char( p_dienstnummer ) ||'.html', FALSE );

die regel lost alles op :-)

* mkleinman happy now :-)

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 13 maart 2002 14:07 schreef mkleinman64 het volgende:
Je komt wel uit die loop, want als je meer data selecteerd uit een lob dan er in zit krijg je een no data found exceptie en daar klapt hij uit de loop.
Met als gevolg dat je NULL returned :?

  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 15:50

mkleinman

8kWp, WPB, ELGA 6

Topicstarter
niet null returnen maar gewoon bij je exception zonder extra sjit uit je block returned :-)

De

BEGIN

LOOP

ENDLOOP

EXCEPTION
WHEN NO_DATA_FOUND THEN NULL

END;

is puur voor het doorlopen van je lob en wanneer je klaar bent dan ben je klaar :-) anders zou je een no_data_found exception krijgen en die vang je zo dus af.

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op woensdag 13 maart 2002 14:27 schreef mkleinman64 het volgende:
niet null returnen maar gewoon bij je exception zonder extra sjit uit je block returned :-)
Foei, foei, dirty :+
Wordt je code niet nagekeken door iemand anders?

Who is John Galt?


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 13 maart 2002 14:27 schreef mkleinman64 het volgende:
niet null returnen maar gewoon bij je exception zonder extra sjit uit je block returned :-)
Ahzo, maar echt netjes coden is het natuurlijk niet :)

Als je met een simpele handeling een exception kan voorkomen moet je dat zeker doen, zodat de exception alleen op kan treden in situaties die je zelf niet (echt) in de hand hebt...

  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 15:50

mkleinman

8kWp, WPB, ELGA 6

Topicstarter
Deze code komt rechtstreeks van Oracle af :) (streamen van bestand)

:P lekker dus :P

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


Verwijderd

Oracle code is wel vaker van die spaghetticode (Oracle's eigen code dan he).
Vaak gebruiken ze bepaalde exceptions ook om naar eerdere stukken in de code te gaan.
Soort van GOTO.

  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 15:50

mkleinman

8kWp, WPB, ELGA 6

Topicstarter
Klopt, ik moet die code nog es herschrijven, is helaas geen tijd voor vaak :),, the usual stuff. druk druk drk :)

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.

Pagina: 1