2017-08-25 2 views
0

ich den folgenden Code habe die Liste des Blobs (hochgeladene Dateien) meinen blob Container (benannt id) zu erhalten:Get Azure Blob-Daten in JSON

app.controller("attachmentsController", ["$scope", "$http", function ($scope, $http) { 
    var ct = this; 

    $scope.go = function() { 
     ct.id = $scope.id; 

     var rootUrl = 'https://my-account.blob.core.windows.net'; 
     var containerPropertiesUrl = `${rootUrl}/${ct.id}?restype=container`; 
     var blobListUrl = `${containerPropertiesUrl}&comp=list`; 
     // get container's blob list 
     $http.get(blobListUrl) 
      .then(function (response) { 
       ct.blobs = response.data; 
      }); 
    }; 
}]); 

Im response.data I erhalten XML:

<?xml version="1.0" encoding="utf-8"?> 
<EnumerationResults ContainerName="https://my-account.blob.core.windows.net/000002"> 
<Blobs> 
<Blob> 
<Name>logo-separator.svg</Name> 
<Url>https://my-account.blob.core.windows.net/000002/logo-separator.svg</Url> 
<Properties> 
<Last-Modified>Fri, 25 Aug 2017 10:00:01 GMT</Last-Modified> 
<Etag>0x8Y4EBAX0D5850C7</Etag><Content-Length>2048</Content-Length> 
<Content-Type>application/octet-stream</Content-Type><Content-Encoding /> 
<Content-Language /> 
<Content-MD5>BDm9NV0Zn4e6zQO2e/D1Dg==</Content-MD5><Cache-Control /> 
<BlobType>BlockBlob</BlobType> 
<LeaseStatus>unlocked</LeaseStatus> 
</Properties> 
</Blob> 
</Blobs> 
<NextMarker /> 
</EnumerationResults>" 

Gibt es eine Möglichkeit, all das im JSON-Format zu bekommen, um es in meiner eckigen Anwendung verwenden zu können?

+0

versuchen url Wechsel auf diese: var blobListUrl = '$ {containerPropertiesUrl} & comp = Liste & jsoncallback ='; –

+0

Ich habe das OP bearbeitet, um zu erklären, dass ich keinen Blob-Inhalt lese, aber ich lese die Liste der Blobs (Dateien in meinem Fall) aus einem gegebenen Container – Serge

Antwort

0

Meine (Temp?) Lösung, wie jetzt eine benutzerdefinierte Funktion zu verwenden, die XML in JSON transformiert:

app.controller("attachmentsController", ["$scope", "$http", function ($scope, $http) { 
    var ct = this; 
    // Changes XML to JSON 
    ct.xmlToJson = function(xml) { 

     // Create the return object 
     var obj = {}; 

     if (xml.nodeType == 1) { // element 
      // do attributes 
      if (xml.attributes.length > 0) { 
       obj["@attributes"] = {}; 
       for (var j = 0; j < xml.attributes.length; j++) { 
        var attribute = xml.attributes.item(j); 
        obj["@attributes"][attribute.nodeName] = attribute.nodeValue; 
       } 
      } 
     } else if (xml.nodeType == 3) { // text 
      obj = xml.nodeValue; 
     } 

     // do children 
     if (xml.hasChildNodes()) { 
      for (var i = 0; i < xml.childNodes.length; i++) { 
       var item = xml.childNodes.item(i); 
       var nodeName = item.nodeName; 
       if (typeof (obj[nodeName]) == "undefined") { 
        obj[nodeName] = ct.xmlToJson(item); 
       } else { 
        if (typeof (obj[nodeName].push) == "undefined") { 
         var old = obj[nodeName]; 
         obj[nodeName] = []; 
         obj[nodeName].push(old); 
        } 
        obj[nodeName].push(ct.xmlToJson(item)); 
       } 
      } 
     } 
     return obj; 
    }; 

    $scope.go = function() { 
     ct.id = $scope.id; 

     var rootUrl = 'https://my-account.blob.core.windows.net'; 
     var containerPropertiesUrl = `${rootUrl}/${ct.id}?restype=container`; 
     var blobListUrl = `${containerPropertiesUrl}&comp=list`; 
     // get all possible values 
     $http.get(blobListUrl) 
      .then(function (response) { 
       var xmlString = response.data; 
       var parser = new DOMParser(); 
       var xml = parser.parseFromString(xmlString, "text/xml"); 
       var myObj = ct.xmlToJson(xml); 
       ct.blobs = myObj.Blobs; 
      }); 
    }; 
}]); 
0

Basierend auf der neuesten Azure Liste Blobs REST API-Antwort-Format (letzte Aktualisierung 23. August 2017), die response body is in XML format.

Sie müssen eine benutzerdefinierte Funktion implementieren oder ein npm-Paket wie xmltojson verwenden, um den Antworttext vom XML- in das JSON-Format zu konvertieren.

Referenz:

Azure List Blobs REST Response