Page 1 of 2

Upload einer Datei mit BSP / !!!dringend!!!

PostPosted: Thu Mar 27, 2003 10:25 am
by Lilia3936
Hallo zusammen,

wie kann ich ein Upload einer Datei vom Clienten mit einer BSP-Aplikation
realisieren. Der Client hat kein Sapgui nur einen IE.

Danke für Eure Hilfe :?

PostPosted: Thu Mar 27, 2003 10:38 am
by Walter4536
Hi Rene,

hier solltest Du alles notwendige finden:

http://help.sap.com/saphelp_webas620sp9 ... ameset.htm

Pfad: Web-Applikationen und Business Server Pages -> Programmierumfeld -> File-Upload in BSP-Applikationen

wichtig: form method muss 'POST' sein und enctype 'multipart/form-data'

Gruß,
Steff

PostPosted: Thu Mar 27, 2003 11:03 am
by Ava146
Das mit dem Upload würde mich auch stark interessieren.

Ich kann aber nirgens erkennen, wo die Dateien abgelegt werden, die man hochlädt!

Gruss Aga

PostPosted: Thu Mar 27, 2003 11:03 am
by Ava146
Das mit dem Upload würde mich auch stark interessieren.

Ich kann aber nirgens erkennen, wo die Dateien abgelegt werden, die man hochlädt!

Gruss Aga

PostPosted: Thu Mar 27, 2003 11:26 am
by Walter4536
Hi Aga,

im OnInputProcessing kannst Du Dir den Bytestream des hochgeladenen Files geben lassen.
Ich denke die HTML-Seite ist klar: Du brauchst ein Tag in der Art: <input type=file name=myfile ...>
Dann einen Submit-Button, mit entsprechendem event im OnInputProcessing. Dort kannst Du Dir dann das File wie folgt holen (siehe Beispiel in der Doku):
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. * file upload and echo
  2.  
  3.     data: entity         type ref to if_http_entity,
  4.  
  5.           file           type xstring,
  6.  
  7.           content_type   type string,
  8.  
  9.           content_length type string,
  10.  
  11.           num_multiparts type i,
  12.  
  13.           i              type i value 1,
  14.  
  15.           doEcho         type string,
  16.  
  17.           value          type string.
  18.  
  19. *   find multipart containing file
  20.  
  21.     num_multiparts = request->num_multiparts&#40; &#41;.
  22.  
  23.     while i <= num_multiparts.
  24.  
  25.       entity = request->get_multipart&#40; i &#41;.
  26.  
  27.       value = entity->get_header_field&#40; '~content_filename' &#41;.
  28.  
  29.       if not value is initial.
  30.  
  31. *       found a file!
  32.  
  33.         navigation->set_parameter&#40; name  = 'content_filename'
  34.  
  35.                                    value = value &#41;.
  36.  
  37.         content_type = entity->get_header_field&#40; 'Content-Type' &#41;.
  38.  
  39.         navigation->set_parameter&#40; name  = 'content_type'
  40.  
  41.                                    value = content_type &#41;.
  42.  
  43. *       get file content
  44.  
  45.         file = entity->get_data&#40; &#41;.
  46.  
  47. *       get file size
  48.  
  49.         content_length = xstrlen&#40; file &#41;.
  50.  
  51.  
  52. ...
  53.  
GeSHi ©


Gruß,
Steff

PostPosted: Thu Mar 27, 2003 12:55 pm
by Aurora145
Ja, soweit so gut, aber wie und wo packe ich das dann hin, ich will mir das ja vielleicht später nochmal angucken...

In eine Datenbanktabelle,
oder irgendein verzeichnispfad?

Bis jetzt bekomme ich ja "nur" die daten des Files aber noch ist das file ja nirgens gesichert.

Gruss Aga

PostPosted: Thu Mar 27, 2003 1:06 pm
by Walter4536
Hi Aga,

ach so meinst Du das. Na ja, das File könnte man im einfachsten Fall im Business Document Service abspeichern (Transaktion OAER). Dazu gibt es eine API mit entsprechenden Bausteinen zum Abspeichern solcher Files und auch wieder zum Auslesen. Näheres müßte sich in der Doku finden lassen, weiß es leider nicht auswendig wie die Bausteine heissen.

Dann gibt es in neueren Releasen den KPRO. Damit kannst Du dasselbe machen. Findet sich im Paket 'SO', Funktionsgruppe 'SOI1'. Ist ganz gut dokumentiert (z.B. FB 'SO_DOCUMENT_INSERT_API1')

Schlussendlich kann man natürlich auch hergehen und sich eine entsprechende Funktionalität selbst 'basteln'. Im Prinzip braucht man nur eine Tabelle für Filenamen, Mimetype, Beschreibung evlt. ID und eine Tabelle die den eigentlichen Content enthält. Dann kann man den Bystream z.B. in einen XSTRING ablegen bzw. in mehrere Tabellenzeilen vom Typ 'RAW'. Dann noch entsprechende Fubas zum Lesen und Schreiben.

Gruß,
Steff

PostPosted: Thu Mar 27, 2003 1:24 pm
by Lilia3936
Hallo zusammen,

Danke für die Hilfe, mein Problem ist gelöst.

PS: meine Datei legen ich ins KPRO ab

Gruß Rene

PostPosted: Thu Mar 27, 2003 2:12 pm
by Axel147
Jo, jetzt kommen wir der Sache näher, danke :)

Rene, kannst du mir mal deinen Code schicken, oder hier reinstellen, wie du die Dinger wegspeicherst?

Wäre klasse!!!


Gruss Aga

PostPosted: Fri Mar 28, 2003 5:28 pm
by Jolie2216
Hi,

für die KPRO Ablage gehe ich wie folgt vor:
call function 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = file
* APPEND_TO_TABLE =
IMPORTING
OUTPUT_LENGTH = lv_output_length
TABLES
BINARY_TAB = lt_binary_tab.

Damit aus dem "file"/xstring eine "binary_tab" machen, umformatieren und schließlich mit "CVAPI_DOK_CHECKIN" (WICHTIG: PF_CONTENT_PROVIDE = 'TBL') für das entsprechende Dokument einchecken.

Gruß Jens W