Show TOC

HintergrundFile-Upload in BSP-Applikationen Dieses Dokument in der Navigationsstruktur finden

 

Eine Web-Anwendung enthält neben den statischen und dynamischen HTML-Seiten in der Regel weitere statische Dateien, wie Bilder oder Logos. Hierbei muss zwischen den Dateien, die zur Applikation gehören (wie Hintergrundgrafiken, Buttons, Logos, etc.) und Dateien, die Teil der Anwendungsdaten sind (Fotos von Häusern eines Immobilienmarktplatzes, Buchcover, Mitarbeiterbilder, etc.), unterschieden werden. Bei BSP-Applikationen, die mit dem SAP Web Application Server entwickelt werden, kann diese Trennung sauber vollzogen werden.

Die Dateien, die zur Applikation gehören, werden im MIME-Repository als Bestandteil der BSP-Applikation abgelegt und in der Regel gemeinsam mit den BSPs, also den Seiten selbst, verwaltet, transportiert und ggf. übersetzt. Die Bilder und binären Objekte, die zu den Anwendungsdaten (Stammdaten und Bewegungsdaten in der Datenbank) gehören, sollten dagegen zusammen mit diesen verwaltet und transportiert werden.

Zusätzlich sind Szenarien möglich, in denen beliebige Dokumente über den Browser in das System eingespielt werden sollen, d.h. File-Upload.

Siehe auch:

File-Upload und Manipulation des Content

Voraussetzungen

Für das File-Handling in BSP-Applikationen benötigen Sie Kenntnisse in den folgenden Bereichen:

Beispiel

Ein Beispiel für den File-Upload finden Sie in der BSP-Applikation it00.

Das Layout der BSP könnte so aussehen.

Syntax Syntax

  1. <%@ page language="abap"%>
    <html>
      <body>
        <h2> Form with File Upload and Download </h2>
          <p>Choose a file for upload. The file will be echoed 
            to your browser if you select the checkbox below.
            <form method="POST" enctype="multipart/form-data">
            <table border=1 width="100%">
              <tr>
                <td> &lt;input type=checkbox name="doEcho"&gt; </td>			
                <td> <input type=checkbox name="doEcho" value="X">
                  (select for echo)</td>
              </tr>
              <tr>
                <td> &lt;input type=file name="echoFile"&gt; </td>
                <td> <input type=file name="echoFile"> </td>
              </tr>
              <tr>
                <td> &lt;input type=submit name="onInputProcessing(upload)"
                  value="Submit"&gt; </td>
                <td> <input type=submit name="onInputProcessing(upload)"
                  value="Submit"> </td>
              </tr>
            </table>
          </form>
        </body>
    </html>
    
Ende des Codes

Wenn Sie die Seite aufrufen, sehen Sie folgendes Bild.

Die Abbildung wird im Begleittext erläutert.

Der eigentliche Upload findet statt, wenn Sie Submit wählen, also im Eventhandler OnInputProcessing:

Syntax Syntax

  1. * event handler for checking and processing user input and
    
    * for defining navigation
    
    * file upload and echo
    
        data: entity         type ref to if_http_entity,
    
              file           type xstring,
    
              content_type   type string,
    
              content_length type string,
    
              num_multiparts type i,
    
              i              type i value 1,
    
              doEcho         type string,
    
              value          type string.
    
    *   find multipart containing file
    
        num_multiparts = request->num_multiparts( ).
    
        while i <= num_multiparts.
    
          entity = request->get_multipart( i ).
    
          value = entity->get_header_field( '~content_filename' ).
    
          if not value is initial.
    
    *       found a file!
    
            navigation->set_parameter( name  = 'content_filename'
    
                                       value = value ).
    
            content_type = entity->get_header_field( 'Content-Type' ).
    
            navigation->set_parameter( name  = 'content_type'
    
                                       value = content_type ).
    
    *       get file content
    
            file = entity->get_data( ).
    
    *       get file size
    
            content_length = xstrlen( file ).
    
            navigation->set_parameter( name  = 'content_length'
    
                                       value = content_length ).
    
    *       echo/download the same file again?
    
            doEcho = request->get_form_field( 'doEcho' ).
    
            if doEcho is not initial.
    
    *         set response data to be the file content
    
              runtime->server->response->set_data( file ).
    
    *         set the mime-type and file size in the response
    
              runtime->server->response->set_header_field(
    
                name  = 'Content-Type'
    
                value = content_type ).
    
              runtime->server->response->set_header_field(
    
                name  = 'Content-Length'
    
                value = content_length ).
    
              runtime->server->response->delete_header_field(
    
                name = 'Cache-Control' ).
    
              runtime->server->response->delete_header_field(
    
                name = 'Expires' ).
    
            endif.
    
            exit.
    
          endif.
    
          i = i + 1.
    
        endwhile.
    
        if doEcho is not initial.
    
    *       signal to the BSP runtime that the response data is
    
    *       complete and no onLayout method should be called to
    
    *       create the response
    
            navigation->response_complete( ).
    
        else.
    
          navigation->goto_page( 'transition_parameter_upload.htm' ).
    
        endif.
    
Ende des Codes

Wenn Sie also ein File angegeben haben und die Echo-Checkbox aktiviert haben, sehen Sie den Inhalt der gewählten Datei im Browser:

Die Abbildung wird im Begleittext erläutert.