2016-08-08 20 views
1

Wie erstellen Sie Subcontainer (Verzeichnis) und laden sie mit Rackspace OpenNetStack SDK hoch? Ich habe versucht, "\" beim Erstellen eines Unter-Container hinzufügen, aber es erstellt tatsächlich einen Container mit dem Namen folder\subfolder, weil ich nirgendwo im OpenNetStack SDK finden kann, wie Sie einen Unter-Container hinzufügen. Trotzdem wäre es nicht allzu schwierig, die Subcontainer manuell zu erstellen. Aber was ist mit dem Hochladen?Wie erstellt/Upload in Subcontainern mit Rackspace?

Kennt jemand eine andere Rackspace-Bibliothek, die das Erstellen/Hochladen auf Subcontainern ermöglichen würde?

+0

Haben Sie versucht, [vorwärts statt Schrägstriche Schrägstriche] (https://developer.rackspace.com/docs/cloud-files/v1/developer-guide/#document-pseudo-hierarchical-folders-and- Verzeichnisse)? – stuartd

+0

Ja, jedoch wird ein Fehler ausgegeben. "Container enthält"/"" – NuWin

Antwort

2

Sie sind sehr nah dran! Der Trick besteht darin, ein URL-Pfadtrennzeichen, /, in den Objektnamen und nicht in den Containernamen einzufügen. So funktioniert die OpenStack ObjectStorage-API und ist nicht spezifisch für .NET SDK oder Rackspace.

In der folgenden Beispielanwendung für die Konsole erstelle ich einen Container images und füge dann eine Datei zu einem Unterverzeichnis in diesem Container hinzu, indem ich ihn thumbnails/logo.png nenne. Die resultierende öffentliche URL für die Datei wird ausgedruckt und ist im Wesentlichen die öffentliche URL des Containers + der Dateiname oder http://abc123.r27.cf1.rackcdn.com/thumbnails/logo.png. Die Container-URL wird für jeden Container und Benutzer eindeutig sein.

using System; 
using net.openstack.Core.Domain; 
using net.openstack.Providers.Rackspace; 

namespace CloudFileSubdirectories 
{ 
    public class Program 
    { 
     public static void Main() 
     { 
      // Authenticate 
      const string region = "DFW"; 
      var user = new CloudIdentity 
      { 
       Username = "username", 
       APIKey = "apikey" 
      }; 
      var cloudfiles = new CloudFilesProvider(user); 

      // Create a container 
      cloudfiles.CreateContainer("images", region: region); 

      // Make the container publically accessible 
      long ttl = (long)TimeSpan.FromMinutes(15).TotalSeconds; 
      cloudfiles.EnableCDNOnContainer("images", ttl, region); 
      var cdnInfo = cloudfiles.GetContainerCDNHeader("images", region); 
      string containerPrefix = cdnInfo.CDNUri; 

      // Upload a file to a "subdirectory" in the container 
      cloudfiles.CreateObjectFromFile("images", @"C:\tiny-logo.png", "thumbnails/logo.png", region: region); 

      // Print out the URL of the file 
      Console.WriteLine($"Uploaded to {containerPrefix}/thumbnails/logo.png"); 
      // Uploaded to http://abc123.r27.cf1.rackcdn.com/thumbnails/logo.png 
     } 
    } 
} 
+1

Vielen Dank für den Hinweis, dass es für OpenStack.NET kein Beispiel dafür gibt. Ich habe es dem Wiki hinzugefügt: https://github.com/openstacknetsdk/openstack.net/wiki/Rackspace-Cloud-Files-Code-Samples#create-subdirectories-in-a-container –

+0

Das ist genial, ich wirklich bin dankbar! – NuWin