2016-08-01 8 views
0

Ich erhalte 403 Verbotener Fehler, wenn ich versuche, eine Datei mit UploadCollection hochzuladen. Der Code in meinem view.js ist:Datei kann nicht hochgeladen werden mit UploadCollection in SAPUI5

 var oOUpload = new sap.m.UploadCollection("oinspupload",{ 
     multiple : true, 
     sameFilenameAllowed : true, 
     instantUpload : false, 
     uploadUrl : "/sap/opu/odata/sap/ZACCBILL_SRV/FileSet", 
/*  uploadComplete : function(oEvent){ 
      //alert ("File Uploaded successfully"); 
     // oController.fileUpload(oEvent); 
     }, */ 
     fileDeleted : function(oEvent){ 
      oController.fileDelete(oEvent); 
     }, 
     fileRenamed : function(oEvent){ 
      alert ("File renamed successfully"); 
      //oController.fileRename(oEvent); 
     } 
    }); 

Der Code in meinem view.controller ist:

  OData.request({ 
       requestUri : sServiceUrl, 
       method : "GET", 
       headers : 
       { 
        "X-Requested-With" : "XMLHttpRequest", 
        "Content-Type" : "application/atom+xml", 
        "DataServiceVersion" : "2.0", 
        "Authorization" : AuthToken, 
        "X-CSRF-Token" : "Fetch" 
       } 

      }, 
      function(data, response) { 
       debugger; 
       if(sap.ui.Device.browser.chrome || sap.ui.Device.browser.msie || sap.ui.Device.browser.safari){ 
        header_xcsrf_token = response.headers['x-csrf-token']; 
       }else if(sap.ui.Device.browser.firefox){ 
        header_xcsrf_token = response.headers['X-CSRF-Token']; 
       } 
       xcsrf_token_ref.header_xcsrf_token = header_xcsrf_token; 
       csrftoken = xcsrf_token_ref.header_xcsrf_token; 
      debugger; 
      uploadattachments(xcsrf_token_ref); 
      }, 
      function(err) { 
       debugger; 
       var request = err.request; // the request that was sent. 
       var response = err.response; // the response that was received. 
       alert("Error in Get -- Request " 
         + request + " Response " 
         + response); 
      }); 


    function uploadattachments(token){ 
debugger; 
    var uploader;   
     uploader= sap.ui.getCore().byId("oinspupload"); 

     var aItems = uploader.getItems(); 
      var slug, sequence; 
      for (i = 0; i < aItems.length; i++) { 
      sequence = i + 1; 
      slug = "CONTAINERID1000040100;STATUSIB;SEQUENCE" + sequence+   ";FILENAMECamera.png" ; 
    uploader.addHeaderParameter(new sap.m.UploadCollectionParameter({name: "slug", value: slug })); 
    debugger; 
    uploader.addHeaderParameter(new sap.m.UploadCollectionParameter({name: "X-Csrf-Token", value: token.header_xcsrf_token })); 

    uploader.upload(); 
} 
} 

Bitte die fehlende Klammer nichts dagegen, da der Code oben nicht der vollständige Code ist .

Der obige Code funktioniert gut mit fileuploader. Ich bin mir sicher, dass das Problem darin besteht, dass die uploadcollection das abgerufene CSRF-Token nicht korrekt weitergibt, aber ich kann nicht herausfinden, was falsch ist.

+0

Jeder mir zu diesem Thema zu helfen? –

Antwort

0

endlich die Lösung selbst mit Hilfe des folgenden Blog gefunden http://scn.sap.com/community/developer-center/front-end/blog/2016/03/29/using-the-uploadcollection-to-uploaddownload-archivelink-files-via-gateway

hochladen Sammlung nur mit instantUpload als wahr arbeitet und mit instantUpload als falsch nicht ab Version 1.32.X. arbeiten UploadCollection ist Buggy und soll in den zukünftigen Versionen noch korrigiert werden. Außerdem muss die CSRF-Token-Validierung im Änderungsereignis durchgeführt werden. Unten ist der Code:

View.js

var oOUpload = new sap.m.UploadCollection("oinspupload",{ 
     multiple : true, 
     sameFilenameAllowed : false, 
     instantUpload : true, 
     uploadUrl : "/sap/opu/odata/sap/ZACCBILL_SRV/FileSet", 
     fileDeleted : function(oEvent){ 
      oController.fileDelete(oEvent); 
     }, 
     fileRenamed : function(oEvent){ 
      alert ("File renamed successfully"); 
     }, 
     change: function(oEvent) { 
      debugger; 
      csrftoken = xcsrf_token_ref.header_xcsrf_token; 
      var oUploadCollection = oEvent.getSource(); 
      var oCustomerHeaderToken = new sap.m.UploadCollectionParameter({ 
       name : "x-csrf-token", 
       value : csrftoken 
      }); 
      oUploadCollection.addHeaderParameter(oCustomerHeaderToken); 
     }, 
    }); 
0

Alle Header params von "change" Funktion hinzugefügt werden müssen. Wenn Sie es nachher hinzufügen, werden sie im Backend nicht empfangen.

Es ist auch möglich, Dateien mit instantUpload = false hochzuladen. Sie müssen nur den Parameter uploadUrl mit einem Parameter des Modells der Ansicht binden und dynamisch ändern, wenn Sie die URL ändern.

Zum Beispiel:

anzeigen Element:

<UploadCollection instantUpload="false" uploadUrl="{ResourceModel>/sServiceUrl}"/> 

-Controller onInitFunction:

var resourcemodel = this.getOwnerComponent().getModel("ZGW_PURCHREQ_01_SRV"); 
var oDataResource = { 
    sServiceUrl: resourcemodel.sServiceUrl + "/FileSet" 
}; 
var jsonResource = new JSONModel(oDataResource); 
this.getView().setModel(jsonResource, "ResourceModel"); 

Wenn Sie Upload Feuer, wird es eine Petition senden definiert uploadUrl auf "sServiceUrl" von " Ressourcenmodell ".

Andere Option gesetzt Upload-URL und/oder neuen Header params vor Feuer Upload-Funktion mit:

var oUploadCollection = this.getView().byId("UploadCollection"); 
var sServiceUrl = resourcemodel.sServiceUrl + "/FileSet"; 
var headerBanfn = new sap.ui.unified.FileUploaderParameter({ 
    name: "banfn", 
    value: "123456" 
}); 
for (var i = 0; i < oUploadCollection._aFileUploadersForPendingUpload.length; i++) { 
    oUploadCollection._aFileUploadersForPendingUpload[i].setUploadUrl(sServiceUrl); 
    oUploadCollection._aFileUploadersForPendingUpload[i].addHeaderParameter(headerBanfn); 
} 
       oUploadCollection.upload(); 

Ich hoffe, es war nützlich.

Verwandte Themen