2013-05-03 9 views
5

Ich versuche, einen Datei-Upload in einer UI5-Anwendung auf einem HANA XS Server zu implementieren. Ich kann nicht viele Informationen finden, wie man das macht - hat jemand eine Idee?SAP HANA XS Datei-Upload mit UI5

+0

https Versuchen: // uploadcare. com/verwende ich es, um Benutzer-Uploads zu behandeln und wirklich glücklich, dass ich nicht selbst damit umgehen muss. – Fedor

Antwort

6

hier ist die einfache Implementierung eines einfachen Text-Datei-Upload:

Client-Seite js:

doUpload: function() { 
    var uploadField = document.getElementById("ulUploader1-fu"); 
    var file = uploadField.files[0]; 

    var reader = new FileReader(); 
    reader.onload = function (event) { 
    var source = event.target.result; // this is the binary values 
    var name = file.name;  

    $.ajax({ 
     url: "/services/upload.xsjs?cmd=Import", 
     type: "PUT", 
     processData: false, 
     contentType: file.type, 
     data: source, 
     xhr: function() { 
      var req = $.ajaxSettings.xhr(); 
      if (req) { 
       if (req.overrideMimeType) { 
        req.overrideMimeType('text/plain; charset=x-user-defined'); 
       } 
       if (req.sendAsBinary) { 
        req.send = req.sendAsBinary; 
       } 
      } 
      return req; 
     }, 
     error: function(xhr, textStatus, errorThrown){ 
      alert(xhr.responseText); 
     }, 
     success: function() { 
      reader.onload = null; 
     } 
     }); 
    }; 
    reader.readAsText(file); 
} 

Und hier ist der server xsjs Service:

function doImport() { 
    var data = '', conn = $.db.getConnection(), pstmt; 

    if($.request.body){ 
     data = $.request.body.asString();  
    } 

    var conn = $.db.getConnection(); 
    var pstmt = conn.prepareStatement('INSERT INTO "TEST"."UPLOAD" (ID, MIMETYPE, DATA) VALUES(?,?,?)'); 

    pstmt.setInteger(1,1); 
    pstmt.setString(2,"text/plain"); 
    pstmt.setString(3,data); 

    pstmt.execute(); 
    pstmt.close(); 

    conn.commit(); 
    conn.close(); 

    doResponse(200,''); 

    $.response.contentType = 'text/plain'; 
    $.response.setBody('Upload ok'); 
    $.response.status = 200; 
} 
+0

Was ist, wenn ich Array von Json-Objekt senden möchte? Wie kann ich auf HANA zugreifen? Wenn ich Daten mit Ajax-Post sende, kann ich keine Daten über Hana sehen. Zum Beispiel - 'type:" PUT ", processData: false, contentType: Datei.Typ, Daten: ObjektArray', Irgendwelche Vorschläge? – user557657

0

Es gibt keinen "ready-to-consume" -Service von XS, mit dem Sie das tun können. Sie können natürlich eine Tabelle in der HANA DB erstellen, ein spaltenartiges BLOB erstellen und dann einen Dienst auf XS aufbauen, mit dem Sie eine Datei von Ihrem Frontend hochladen können. Ich hoffe das hilft.