Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure Blob Storage is een service waarmee ongestructureerde gegevens in de cloud als objecten/blobs worden opgeslagen. In Blob Storage kan elk type tekst of binaire gegevens, zoals een document, mediabestand of toepassingsinstallatieprogramma, worden opgeslagen. U kunt Blob Storage zien als een vorm van objectopslag.
In dit artikel leest u hoe u algemene taken uitvoert met blobopslag. De voorbeelden worden geschreven met F# met het Azure.Storage.Blobs pakket. De behandelde taken omvatten het uploaden, vermelden, downloaden en verwijderen van blobs.
Zie de .NET-handleiding voor blobopslag voor een conceptueel overzicht van blobopslag. Voor het gemak gebruiken deze zelfstudies verbindingsreeksen voor verificatie met Azure. Voor productietoepassingen moet u Microsoft Entra ID gebruiken met beheerde identiteiten of de Azure.Identity-bibliotheek voor verbeterde beveiliging.
Belangrijk
In dit artikel wordt het moderne Azure.Storage.Blobs pakket gebruikt. Als u bijwerkt van oudere code die de afgeschafte WindowsAzure.Storage of Microsoft.Azure.Storage.Blob pakketten heeft gebruikt, moet u uw pakketverwijzingen en naamruimtedeclaraties bijwerken. Zie Migreren naar Azure.Storage.Blobs voor migratierichtlijnen.
Opmerking
F#-ontwikkelaars kunnen de FSharp.Azure.Blob-bibliotheek overwegen, die een meer idiomatische F#-API biedt voor het werken met Azure Blob Storage. Deze communitybibliotheek biedt idiomatische F#-functies en -patronen die blobbewerkingen natuurlijker maken in F#.
Vereisten
Als u deze handleiding wilt gebruiken, moet u eerst een Azure-opslagaccount maken. U hebt ook uw opslagtoegangssleutel nodig voor dit account.
Een F#-script maken en F# interactief starten
De voorbeelden in dit artikel kunnen worden gebruikt in een F#-toepassing of een F#-script. Als u een F#-script wilt maken, maakt u een bestand met de .fsx extensie, bijvoorbeeld blobs.fsxin uw F#-ontwikkelomgeving.
Scripts uitvoeren
F# Interactive, dotnet fsi, kan interactief worden gestart, of vanaf de commandoregel worden uitgevoerd om een script te draaien. De syntaxis van de opdrachtregel is
> dotnet fsi [options] [ script-file [arguments] ]
Pakketten toevoegen in een script
Gebruik #rnuget:package name dit om het Azure.Storage.Blobs pakket en open de vereiste naamruimten te installeren:
> #r "nuget: Azure.Storage.Blobs"
open Azure.Storage.Blobs
open Azure.Storage.Blobs.Models
open Azure.Storage.Blobs.Specialized
Naamruimtedeclaraties toevoegen
Voeg boven aan het open-bestand de volgende blobs.fsx-instructies toe:
open System
open System.IO
open Azure.Storage.Blobs // Namespace for Blob storage types
open Azure.Storage.Blobs.Models
open Azure.Storage.Blobs.Specialized
open System.Text
Verkrijg uw verbindingsreeks
Voor deze zelfstudie hebt u een Azure Storage-verbindingsreeks nodig. Zie Opslagverbindingsreeksen configureren voor meer informatie over verbindingsreeks s.
Voor de zelfstudie voert u uw verbindingsreeks in uw script in, zoals hieronder:
let storageConnString = "..." // fill this in from your storage account
Enkele lokale dummygegevens maken
Voordat u begint, maakt u enkele lokale dummygegevens in de map van ons script. Later uploadt u deze gegevens.
// Create a dummy file to upload
let localFile = "./myfile.txt"
File.WriteAllText(localFile, "some data")
De blobserviceclient maken
Met het BlobContainerClient type kunt u containers maken en blobs ophalen die zijn opgeslagen in Blob Storage. Hier volgt een manier om de containerclient te maken:
let container = BlobContainerClient(storageConnString, "mycontainer")
U bent nu klaar om code te schrijven die gegevens leest uit en schrijft naar Blob Storage.
Een container maken
In dit voorbeeld ziet u hoe u een container kunt maken als deze nog niet bestaat:
container.CreateIfNotExists()
Standaard is de nieuwe container privé, wat betekent dat u uw toegangssleutel voor opslag moet opgeven om blobs uit deze container te downloaden. Als u de bestanden in de container beschikbaar wilt maken voor iedereen, kunt u de container met de volgende code instellen op openbaar:
let permissions = PublicAccessType.Blob
container.SetAccessPolicy(permissions)
Iedereen op internet kan blobs in een openbare container zien, maar de blobs kunnen alleen worden gewijzigd of verwijderd door iemand die de juiste accounttoegangssleutel of een Shared Access Signature heeft.
Een blob uploaden naar een container
Azure Blob Storage ondersteunt blok-blobs en pagina-blobs. In de meeste gevallen is een block blob het aanbevolen type om te gebruiken.
Als u een bestand wilt uploaden naar een blok-blob, verkrijgt u een containerclient en gebruikt u deze om een blok-blobreferentie op te halen. Zodra u een blobreferentie hebt, kunt u elke gegevensstroom ernaar uploaden door de Upload methode aan te roepen. Met deze bewerking wordt de inhoud van de blob overschreven, waardoor er een nieuwe blok-blob wordt gemaakt als er geen bestaat.
// Retrieve reference to a blob named "myblob.txt".
let blockBlob = container.GetBlobClient("myblob.txt")
// Create or overwrite the "myblob.txt" blob with contents from the local file.
use fileStream = new FileStream(localFile, FileMode.Open, FileAccess.Read, FileShare.Read)
do blockBlob.Upload(fileStream)
Blobs in een container opsommen
Als u een lijst van de blobs in een container wilt weergeven, haalt u eerst een containerverwijzing op. Vervolgens kunt u de methode van GetBlobsByHierarchy de container gebruiken om de blobs en/of mappen erin op te halen. Met deze methode worden objecten geretourneerd BlobItem die toegang bieden tot blobeigenschappen en metagegevens.
for item in container.GetBlobsByHierarchy() do
printfn $"Blob name: {item.Blob.Name}"
Bekijk bijvoorbeeld de volgende set blok-blobs in een container met de naam photos:
photo1.jpg
2015/architecture/description.txt
2015/architecture/photo3.jpg
2015/architecture/photo4.jpg
2016/architecture/photo5.jpg
2016/architecture/photo6.jpg
2016/architecture/description.txt
2016/photo7.jpg\
Wanneer u GetBlobsByHierarchy aanroept op een container (zoals in het bovenstaande voorbeeld), wordt er een hiërarchische vermelding geretourneerd.
Directory: https://<accountname>.blob.core.windows.net/photos/2015/
Directory: https://<accountname>.blob.core.windows.net/photos/2016/
Block blob of length 505623: https://<accountname>.blob.core.windows.net/photos/photo1.jpg
Blobs downloaden
Als u blobs wilt downloaden, haalt u eerst een blobreferentie op en roept u vervolgens de DownloadTo methode aan. In het volgende voorbeeld wordt de DownloadTo methode gebruikt om de blob-inhoud over te dragen naar een stroomobject dat u vervolgens kunt behouden naar een lokaal bestand.
// Retrieve reference to a blob named "myblob.txt".
let blobToDownload = container.GetBlobClient("myblob.txt")
// Save blob contents to a file.
do
use fileStream = File.OpenWrite("path/download.txt")
blobToDownload.DownloadTo(fileStream)
U kunt ook de DownloadContent methode gebruiken om de inhoud van een blob te downloaden als een tekenreeks.
let text = blobToDownload.DownloadContent().Value.Content.ToString()
Blobs verwijderen
Als u een blob wilt verwijderen, haalt u eerst een blobreferentie op en roept u de Delete methode erop aan.
// Retrieve reference to a blob named "myblob.txt".
let blobToDelete = container.GetBlobClient("myblob.txt")
// Delete the blob.
blobToDelete.Delete()
Blobs asynchroon op pagina's weergeven
Als u een groot aantal blobs in een lijst weergeeft of als u het aantal resultaten dat per lijst wordt geretourneerd, wilt bepalen, kunt u blobs weergeven op pagina's met resultaten. In dit voorbeeld ziet u hoe u resultaten in pagina's kunt weergeven.
In dit voorbeeld ziet u een hiërarchische lijst met behulp van de GetBlobsByHierarchy methode van de BlobContainerClient.
let ListBlobsSegmentedInHierarchicalListing(container:BlobContainerClient) =
// List blobs to the console window, with paging.
printfn "List blobs in pages:"
// Call GetBlobsByHierarchy to return an async collection
// of blobs in this container. AsPages() method enumerate the values
//a Page<T> at a time. This may make multiple service requests.
for page in container.GetBlobsByHierarchy().AsPages() do
for blobHierarchyItem in page.Values do
printf $"The BlobItem is : {blobHierarchyItem.Blob.Name} "
printfn ""
We kunnen deze hiërarchische lijstroutine nu als volgt gebruiken. Upload eerst enkele dummygegevens (met behulp van het lokale bestand dat u eerder in deze zelfstudie hebt gemaakt).
for i in 1 .. 100 do
let blob = container.GetBlobClient($"myblob{i}.txt")
blob.Upload(localFile)
Roep nu de routine aan.
Schrijven naar een append-blob
Een toevoeg-blob is geoptimaliseerd voor toevoegbewerkingen, zoals logboekregistratie. Net als een blok-blob bestaat een toevoeg-blob uit blokken, maar wanneer u een nieuw blok toevoegt aan een toevoeg-blob, wordt deze altijd toegevoegd aan het einde van de blob. U kunt een bestaand blok in een toevoeg-blob niet bijwerken of verwijderen. De blok-id's voor een toevoeg-blob worden niet weergegeven zoals voor een blok-blob.
Alle blokken in een toevoeg-blob kunnen verschillend van grootte zijn. De maximale grootte is 4 MB. Een toevoeg-blob kan maximaal 50.000 blokken bevatten. De maximale grootte van een toevoeg-blob is daarom iets meer dan 195 GB (4 MB X 50.000 blokken).
In het volgende voorbeeld wordt een nieuwe toevoeg-blob gemaakt en worden er enkele gegevens aan toegevoegd, waarbij u een eenvoudige logboekregistratiebewerking simuleert.
let appendContainer = BlobContainerClient(storageConnString, "my-append-blobs")
// Create the container if it does not already exist.
appendContainer.CreateIfNotExists() |> ignore
// Get a reference to an append blob.
let appendBlob = appendContainer.GetAppendBlobClient("append-blob.log")
// Create the append blob. Note that if the blob already exists, the
// CreateIfNotExists() method will overwrite it. You can check whether the
// blob exists to avoid overwriting it by using appendBlob.Exists().
appendBlob.CreateIfNotExists()
let numBlocks = 10
// Generate an array of random bytes.
let rnd = Random()
let bytesArray = Array.zeroCreate<byte>(numBlocks)
rnd.NextBytes(bytesArray)
// Simulate a logging operation by writing text data and byte data to the
// end of the append blob.
for i in 0 .. numBlocks - 1 do
let msg = sprintf $"Timestamp: {DateTime.UtcNow} \tLog Entry: {bytesArray.[i]}\n"
let array = Encoding.ASCII.GetBytes(msg);
use stream = new MemoryStream(array)
appendBlob.AppendBlock(stream)
// Read the append blob to the console window.
let downloadedText = appendBlob.DownloadContent().Value.Content.ToString()
printfn $"{downloadedText}"
Zie Blok-blobs, pagina-blobs en toevoeg-blobs voor meer informatie over de verschillen tussen de drie typen blobs.
Gelijktijdige toegang
Als u gelijktijdige toegang tot een blob van meerdere clients of meerdere procesexemplaren wilt ondersteunen, kunt u ETags of leases gebruiken.
Etag : biedt een manier om te detecteren dat de blob of container is gewijzigd door een ander proces
Lease : biedt een manier om gedurende een bepaalde periode exclusieve, hernieuwbare, schrijf- of verwijdertoegang tot een blob te verkrijgen
Zie Gelijktijdigheid beheren in Microsoft Azure Storage voor meer informatie.
Naamtoewijzing voor containers
Elke blob in Azure-opslag moet zich in een container bevinden. De container maakt deel uit van de blob-naam. Bijvoorbeeld, mydata is de naam van de container in deze voorbeelden van blob-URI's:
https://storagesample.blob.core.windows.net/mydata/blob1.txthttps://storagesample.blob.core.windows.net/mydata/photos/myphoto.jpg
Een containernaam moet een geldige DNS-naam zijn die voldoet aan de volgende naamgevingsregels:
- Containernamen moeten beginnen met een letter of cijfer en mogen alleen letters, cijfers en het streepje (-) bevatten.
- Elk streepje (-) moet direct worden voorafgegaan en worden gevolgd door een letter of cijfer; opeenvolgende streepjes zijn in containernamen niet toegestaan.
- Alle letters in een containernaam moeten kleine letters zijn.
- Containernamen moeten 3 tot 63 tekens lang zijn.
De naam van een container moet altijd kleine letters bevatten. Als u een hoofdletter in een containernaam opneemt of de naamgevingsregels op een andere manier schendt, wordt mogelijk een 400-fout (ongeldige aanvraag) weergegeven.
Beveiliging beheren voor blobs
Standaard beveiligt Azure Storage uw gegevens door de toegang te beperken tot de accounteigenaar, die in het bezit is van de toegangssleutels van het account. Als u blobgegevens in uw opslagaccount wilt delen, moet u voorkomen dat u de beveiliging van de toegangssleutels van uw account in gevaar brengt. U kunt de blobgegevens ook versleutelen om ervoor te zorgen dat deze worden beveiligd tijdens de overdracht en in Azure Storage.
Toegang tot blobgegevens beheren
Standaard zijn de blobgegevens in uw opslagaccount alleen toegankelijk voor de eigenaar van het opslagaccount. Wanneer er een verificatieaanvraag wordt gedaan bij Blob Storage, is de toegangssleutel voor het account standaard vereist. Het is echter mogelijk dat u bepaalde blobgegevens beschikbaar wilt maken voor andere gebruikers.
Blobgegevens versleutelen
Azure Storage biedt ondersteuning voor het versleutelen van blobgegevens op de client en op de server.