mit dem hochladen auf azure-blob-Speicher

Ich weiß, diese Frage kann interpretiert werden als eine doppelte, aber ich kann einfach nicht die blop service arbeiten. Ich habe den standard Beispiel auf der msdn-Website. Ich habe realisiert, die in meinem code aber folgten dem Beispiel. Ich kann mir MobileService, mit dem mitgelieferten Skript im Beispiel zum einfügen eines blob mit öffnen Eigenschaften. Ich habe dann diesen code verwenden, um ein Bild hochzuladen, um die blob-Speicherung:

 BitmapImage bi = new BitmapImage();
 MemoryStream stream = new MemoryStream();
 if (bi != null)
 {
      WriteableBitmap bmp = new WriteableBitmap((BitmapSource)bi);
      bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 100);
 }

 if (!string.IsNullOrEmpty(uploadImage.SasQueryString))
 {
       //Get the URI generated that contains the SAS 
       //and extract the storage credentials.
       StorageCredentials cred = new StorageCredentials(uploadImage.SasQueryString);
       var imageUri = new Uri(uploadImage.ImageUri);

       //Instantiate a Blob store container based on the info in the returned item.
       CloudBlobContainer container = new CloudBlobContainer(
       new Uri(string.Format("https://{0}/{1}",
       imageUri.Host, uploadImage.ContainerName)), cred);

       //Upload the new image as a BLOB from the stream.
       CloudBlockBlob blobFromSASCredential = container.GetBlockBlobReference(uploadImage.ResourceName);
       await blobFromSASCredential.UploadFromStreamAsync(stream);//error!

       //When you request an SAS at the container-level instead of the blob-level,
       //you are able to upload multiple streams using the same container credentials.

       stream = null;
 }

Ich bin immer ein Fehler in diesem code an der Stelle, markiert Fehler, mit der folgenden Fehlermeldung:

+       ex  {Microsoft.WindowsAzure.Storage.StorageException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound.

Was ich nicht verstehe da der code, gibt den string zurück, aus dem Skript ist:

//Generate the upload URL with SAS for the new image.
var sasQueryUrl = blobService.generateSharedAccessSignature(item.containerName, 
item.resourceName, sharedAccessPolicy);

//Set the query string.
item.sasQueryString = qs.stringify(sasQueryUrl.queryString);

//Set the full path on the new new item, 
//which is used for data binding on the client. 
item.imageUri = sasQueryUrl.baseUrl + sasQueryUrl.path;

Natürlich auch zeigt, dass ich nicht völlig begreifen den Bau des blob-Speicher. Und deshalb jede mögliche Hilfe würde geschätzt.

Kommentar Ausarbeitungen
Von der server-code soll es eine öffentliche Anmerkung für mindestens 5 Minuten. Und daher ist es auch kein Problem sein. Mein server-script ist das gleiche wie der link. Aber repliziert hier:

var azure = require('azure');
var qs = require('querystring');
var appSettings = require('mobileservice-config').appSettings;

function insert(item, user, request) {
//Get storage account settings from app settings. 
var accountName = appSettings.STORAGE_ACCOUNT_NAME;
var accountKey = appSettings.STORAGE_ACCOUNT_ACCESS_KEY;
var host = accountName + '.blob.core.windows.net';

if ((typeof item.containerName !== "undefined") && (
item.containerName !== null)) {
    //Set the BLOB store container name on the item, which must be lowercase.
    item.containerName = item.containerName.toLowerCase();

    //If it does not already exist, create the container 
    //with public read access for blobs.        
    var blobService = azure.createBlobService(accountName, accountKey, host);
    blobService.createContainerIfNotExists(item.containerName, {
        publicAccessLevel: 'blob'
    }, function(error) {
        if (!error) {

            //Provide write access to the container for the next 5 mins.        
            var sharedAccessPolicy = {
                AccessPolicy: {
                    Permissions: azure.Constants.BlobConstants.SharedAccessPermissions.WRITE,
                    Expiry: new Date(new Date().getTime() + 5 * 60 * 1000)
                }
            };

            //Generate the upload URL with SAS for the new image.
            var sasQueryUrl = 
            blobService.generateSharedAccessSignature(item.containerName, 
            item.resourceName, sharedAccessPolicy);

            //Set the query string.
            item.sasQueryString = qs.stringify(sasQueryUrl.queryString);

            //Set the full path on the new new item, 
            //which is used for data binding on the client. 
            item.imageUri = sasQueryUrl.baseUrl + sasQueryUrl.path;

        } else {
            console.error(error);
        }

        request.execute();
    });
} else {
    request.execute();
}
}

Die Idee mit den Bildern ist, dass andere Nutzer der app sollte in der Lage sein, auf Sie zuzugreifen. Soweit ich das verstehe habe ich es öffentlich, aber nur schreiben der öffentlichen für 5 Minuten. Die url für den blob Speichere ich in einer mobileservice Tabelle, wo der Benutzer muss authentifiziert werden, würde ich gerne die gleiche Sicherheit auf den Speicher. Aber weiß nicht, ob dies erreicht wird? Ich bin sorry für all die dummen Fragen, aber ich habe nicht in der Lage, es zu lösen, auf meine eigene also muss ich "scheinen" dumm 🙂

  • Irgendwie dumme Frage aber ... hat der container vorhanden?
  • Ja, es gibt Sie in den Speicher, das ist, warum ich kann es nicht verstehen. Und danke für Ihr Verständnis
  • Eine Sache würde ich vorschlagen, ist die Verfolgung Ihrer Anfrage - /Antwort-durch Fiedler. Das sollte Ihnen mehr Informationen geben. Lassen Sie uns wissen, was Sie suchen.
  • Der Fehler ist Ihnen zu sagen, dass die url, die Sie versuchen, Zugriff ist nicht auf den server, stellen Sie sicher, dass die URL korrekt ist. was ist der uri gesendet CloudBlobContainer? Vielleicht gibt es eine // im es das Problem verursacht. Ich bevorzuge es, Dinge zu tun, wie neue Uri(base, path) zu vermeiden, Themen wie die.
  • Wenn der container privat ist, möchte ich kurz versuchen, öffentlich zu machen und löschen Sie die Anmeldeinformationen. Das könnte es einfacher zu Debuggen.
  • Können Sie teilen Sie Ihre server script?
  • Ich habe aktualisiert mit dem code
  • soweit ich weiß sollte es nicht privat, weil der code und wenn ich überprüfen Sie die Speicher-blob im Azure management der container wird als public-blob.
  • Danke, ich werde bei ihm wieder. Bevor ich es hochgeladen schien, um wieder eine richtige URL, vielleicht habe ich etwas verpasst. Ich werde noch einmal überprüfen.
  • Also die url gespeichert in container korrekt aussieht. Problem war nur, dass es wurde eingestellt, um https anstelle von http. Also @GauravMantri Es war eine dumme Frage 🙂

InformationsquelleAutor JTIM | 2014-03-30
Schreibe einen Kommentar