46 votes

Comment télécharger un fichier dans le stockage en masse Azure sans écrire mon propre programme ?

J'ai créé un compte Azure Storage. J'ai un fichier .zip de 400 mégaoctets que je veux placer dans un stockage blob pour une utilisation ultérieure.

Comment puis-je faire cela sans écrire de code ? Existe-t-il une interface pour cela ?

4voto

Ivan Ignatiev Points 767

Il existe un nouvel outil OpenSource fourni par Microsoft :

  • Projet Déco - Explorateur de compte de stockage Microsoft Azure multiplateforme.

S'il vous plaît, vérifiez ces liens :

2voto

ezolotko Points 501

Vous pouvez utiliser Combinaison de nuages pour un téléchargement fiable et rapide de fichiers vers le stockage en mode blob d'Azure.

2voto

David Yee Points 2955

Un simple fichier batch utilisant le logiciel Microsoft AzCopy utilitaire fera l'affaire. Vous pouvez glisser-déposer vos fichiers sur le fichier batch suivant pour les télécharger dans votre conteneur de stockage de blobs :

upload.bat

@ECHO OFF

SET BLOB_URL=https://<<<account name>>>.blob.core.windows.net/<<<container name>>>
SET BLOB_KEY=<<<your access key>>>

:AGAIN
IF "%~1" == "" GOTO DONE

AzCopy /Source:"%~d1%~p1" /Dest:%BLOB_URL% /DestKey:%BLOB_KEY% /Pattern:"%~n1%~x1" /destType:blob

SHIFT
GOTO AGAIN

:DONE
PAUSE

Il convient de noter que la technique ci-dessus ne permet de télécharger qu'un ou plusieurs fichiers individuellement (puisque le fichier Pattern est spécifié) au lieu de télécharger un répertoire entier.

2voto

Sarat Chandra Points 1702

Vous pouvez télécharger des fichiers vers le Blob du compte de stockage Azure en utilisant Invite de commande .

Installer Outils de stockage Microsoft Azure .

Et ensuite le télécharger dans votre compte blob avec la commande CLI :

AzCopy /Source:"filepath" /Dest:bloburl /DestKey:accesskey /destType:blob

J'espère que ça aidera :)

1voto

Inge Henriksen Points 3068

Vous pouvez télécharger des fichiers volumineux directement vers Azure Blob Storage en utilisant le verbe HTTP PUT, le plus gros fichier que j'ai essayé avec le code ci-dessous est de 4,6 Gb. Vous pouvez le faire en C# comme ceci :

// write up to ChunkSize of data to the web request
void WriteToStreamCallback(IAsyncResult asynchronousResult)
{
    var webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
    var requestStream = webRequest.EndGetRequestStream(asynchronousResult);
    var buffer = new Byte[4096];
    int bytesRead;
    var tempTotal = 0;

    File.FileStream.Position = DataSent;

    while ((bytesRead = File.FileStream.Read(buffer, 0, buffer.Length)) != 0
        && tempTotal + bytesRead < CHUNK_SIZE 
        && !File.IsDeleted 
        && File.State != Constants.FileStates.Error)
    {
        requestStream.Write(buffer, 0, bytesRead);
        requestStream.Flush();

        DataSent += bytesRead;
        tempTotal += bytesRead;

        File.UiDispatcher.BeginInvoke(OnProgressChanged);
    }

    requestStream.Close();

    if (!AbortRequested) webRequest.BeginGetResponse(ReadHttpResponseCallback, webRequest);
}

void StartUpload()
{
    var uriBuilder = new UriBuilder(UploadUrl);

    if (UseBlocks)
    {
        // encode the block name and add it to the query string
        CurrentBlockId = Convert.ToBase64String(Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()));
        uriBuilder.Query = uriBuilder.Query.TrimStart('?') + string.Format("&comp=block&blockid={0}", CurrentBlockId);
    }

    // with or without using blocks, we'll make a PUT request with the data
    var webRequest = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(uriBuilder.Uri);
    webRequest.Method = "PUT";
    webRequest.BeginGetRequestStream(WriteToStreamCallback, webRequest);
}

L'UploadUrl est généré par Azure lui-même et contient une signature d'accès partagé, cette URL SAS indique où le blob doit être téléchargé et combien de temps l'accès de sécurité (accès en écriture dans votre cas) est donné. Vous pouvez générer une URL SAS comme ceci :

readonly CloudBlobClient BlobClient;
readonly CloudBlobContainer BlobContainer;

public UploadService()
{
    // Setup the connection to Windows Azure Storage
    var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
    BlobClient = storageAccount.CreateCloudBlobClient();

    // Get and create the container
    BlobContainer = BlobClient.GetContainerReference("publicfiles");
}

string JsonSerializeData(string url)
{
    var serializer = new DataContractJsonSerializer(url.GetType());
    var memoryStream = new MemoryStream();

    serializer.WriteObject(memoryStream, url);

    return Encoding.Default.GetString(memoryStream.ToArray());
}

public string GetUploadUrl()
{
    var sasWithIdentifier = BlobContainer.GetSharedAccessSignature(new SharedAccessPolicy
    {
        Permissions = SharedAccessPermissions.Write,
        SharedAccessExpiryTime =
            DateTime.UtcNow.AddMinutes(60)
    });
    return JsonSerializeData(BlobContainer.Uri.AbsoluteUri + "/" + Guid.NewGuid() + sasWithIdentifier);
}

J'ai également un fil de discussion sur le sujet où vous pouvez trouver plus d'informations ici. Comment télécharger des fichiers volumineux vers le blob Azure à partir d'une page Web ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X