Azure Blob Storage-Bindungen für Azure FunctionsAzure Blob storage bindings for Azure Functions

In diesem Artikel erfahren Sie, wie Sie Azure Blob Storage-Bindungen in Azure Functions verwenden.This article explains how to work with Azure Blob storage bindings in Azure Functions. Azure Functions unterstützt Trigger-, Eingabe- und Ausgabebindungen für Blobs.Azure Functions supports trigger, input, and output bindings for blobs. Der Artikel enthält für jede Bindung einen Abschnitt:The article includes a section for each binding:

Dies sind Referenzinformationen für Azure Functions-Entwickler.This is reference information for Azure Functions developers. Falls Sie mit Azure Functions noch nicht vertraut sind, beginnen Sie mit den folgenden Ressourcen:If you're new to Azure Functions, start with the following resources:

Hinweis

Verwenden Sie den Event Grid-Trigger anstelle des Blobspeichertriggers für reine Blobspeicherkonten, für eine hohe Anzahl oder zum Verringern der Wartezeit.Use the Event Grid trigger instead of the Blob storage trigger for blob-only storage accounts, for high scale, or to reduce latency. Weitere Informationen finden Sie im Abschnitt Trigger.For more information, see the Trigger section.

Pakete: Functions 1.xPackages - Functions 1.x

Die Blobspeicherbindungen werden im NuGet-Paket Microsoft.Azure.WebJobs, Version 2.x bereitgestellt.The Blob storage bindings are provided in the Microsoft.Azure.WebJobs NuGet package, version 2.x. Den Quellcode für das Paket finden Sie im GitHub-Repository azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

Unterstützung für diese Bindung wird automatisch in allen Entwicklungsumgebungen bereitgestellt.Support for this binding is automatically provided in all development environments. Sie müssen das Paket nicht manuell installieren oder die Erweiterung registrieren.You don't have to manually install the package or register the extension.

Azure Storage SDK-Version in Functions 1.xAzure Storage SDK version in Functions 1.x

In Functions 1.x verwenden die Storage-Trigger und -Bindungen Version 7.2.1 des Azure Storage SDK (NuGet-Paket WindowsAzure.Storage).In Functions 1.x, the Storage triggers and bindings use version 7.2.1 of the Azure Storage SDK (WindowsAzure.Storage NuGet package). Wenn Sie auf eine andere Version des Storage SDK verweisen und in Ihrer Funktionssignatur an einen Storage SDK-Typ binden, meldet die Functions-Runtime möglicherweise, dass Bindungen an diesen Typ nicht möglich sind.If you reference a different version of the Storage SDK, and you bind to a Storage SDK type in your function signature, the Functions runtime may report that it can't bind to that type. Die Lösung besteht darin, sicherzustellen, dass Ihr Projekt auf WindowsAzure.Storage 7.2.1 verweist.The solution is to make sure your project references WindowsAzure.Storage 7.2.1.

Pakete: Functions 2.xPackages - Functions 2.x

Die Blobspeicherbindungen werden im NuGet-Paket Microsoft.Azure.WebJobs.Extensions.Storage, Version 3.x bereitgestellt.The Blob storage bindings are provided in the Microsoft.Azure.WebJobs.Extensions.Storage NuGet package, version 3.x. Den Quellcode für das Paket finden Sie im GitHub-Repository azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

Der folgenden Tabelle können Sie entnehmen, wie Sie Unterstützung für diese Bindung in den einzelnen Entwicklungsumgebungen hinzufügen.The following table tells how to add support for this binding in each development environment.

EntwicklungsumgebungDevelopment environment Hinzufügen von Unterstützung inTo add support in
Functions 2.xFunctions 2.x
Lokale Entwicklung – C#-KlassenbibliothekLocal development - C# class library Paket installierenInstall the package
Lokale Entwicklung – C#-Skript, JavaScript, F#, Java und PythonLocal development - C# script, JavaScript, F#, Java and Python Erweiterung registrierenRegister the extension
Entwicklung im PortalPortal development Installieren beim Hinzufügen einer AusgabebindungInstall when adding output binding

Informationen zum Aktualisieren der vorhandenen Bindungserweiterungen im Portal ohne erneute Veröffentlichung Ihres Funktions-App-Projekts finden Sie unter Manually install or update Azure Functions binding extensions from the portal (Manuelles Installieren oder Aktualisieren von Azure Functions-Bindungserweiterungen über das Portal).To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

TriggerTrigger

Der Blobspeichertrigger startet eine Funktion, wenn ein neues oder aktualisiertes Blob erkannt wird.The Blob storage trigger starts a function when a new or updated blob is detected. Der Blob-Inhalt wird als Eingabe für die Funktion bereitgestellt.The blob contents are provided as input to the function.

Der Event Grid-Trigger verfügt über eine integrierte Unterstützung für Blobereignisse und kann auch verwendet werden, um eine Funktion zu starten, wenn ein neuer oder aktualisierter Blob erkannt wird.The Event Grid trigger has built-in support for blob events and can also be used to start a function when a new or updated blob is detected. Ein Beispiel finden Sie die im Tutorial Ändern der Imagegröße mit Event Grid.For an example, see the Image resize with Event Grid tutorial.

Verwenden Sie Event Grid anstelle der Blobspeichertrigger für die folgenden Szenarien:Use Event Grid instead of the Blob storage trigger for the following scenarios:

  • Blob-SpeicherkontenBlob storage accounts
  • Unterstützung einer hohen AnzahlHigh scale
  • Minimieren der LatenzMinimizing latency

Blob-SpeicherkontenBlob storage accounts

Blobspeicherkonten werden für die Blobeingabe- und -ausgabebindungen jedoch nicht für Blobtrigger unterstützt.Blob storage accounts are supported for blob input and output bindings but not for blob triggers. Blob Storage-Trigger erfordern ein allgemeines Speicherkonto.Blob storage triggers require a general-purpose storage account.

Unterstützung einer hohen AnzahlHigh scale

Als „hohe Anzahl“ können Container mit mehr als 100.000 Blobs oder Speicherkonten mit mehr als 100 Blobupdates pro Sekunde lose definiert werden.High scale can be loosely defined as containers that have more than 100,000 blobs in them or storage accounts that have more than 100 blob updates per second.

WartezeitproblemeLatency issues

Wenn Ihre Funktions-App im Verbrauchsplan enthalten ist, kann es möglicherweise bis zu 10 Minuten dauern, bis neue Blobs verarbeitet werden, nachdem eine Funktionen-App in den Leerlauf gewechselt ist.If your function app is on the Consumption plan, there can be up to a 10-minute delay in processing new blobs if a function app has gone idle. Um dies Wartezeit zu vermeiden, können Sie zu einem App Service-Plan wechseln, für den „Always On“ aktiviert ist.To avoid this latency, you can switch to an App Service plan with Always On enabled. Sie können auch einen Event Grid-Trigger mit Ihrem Blobspeicherkonto verwenden.You can also use an Event Grid trigger with your Blob storage account. Ein Beispiel finden Sie im Event Grid-Tutorial.For an example, see the Event Grid tutorial.

Queue Storage-TriggerQueue storage trigger

Neben Event Grid ist eine weitere Alternative zur Verarbeitung von Blobs des Queue Storage-Triggers, der jedoch keine integrierte Unterstützung für Blobereignisse bietet.Besides Event Grid, another alternative for processing blobs is the Queue storage trigger, but it has no built-in support for blob events. Sie müssten beim Erstellen oder Aktualisieren von Blobs Warteschlangennachrichten erstellen.You would have to create queue messages when creating or updating blobs. Ein Beispiel – ausgehend davon, dass dies der Fall ist – finden Sie weiter unten in diesem Artikel im Beispiel für Blobeingabebindungen.For an example that assumes you've done that, see the blob input binding example later in this article.

Trigger: BeispielTrigger - example

Sehen Sie sich das sprachspezifische Beispiel an:See the language-specific example:

Trigger: C#-BeispielTrigger - C# example

Mit der C#-Funktion im folgenden Beispiel wird ein Protokoll geschrieben, wenn im Container samples-workitems ein Blob hinzugefügt oder aktualisiert wird.The following example shows a C# function that writes a log when a blob is added or updated in the samples-workitems container.

[FunctionName("BlobTriggerCSharp")]        
public static void Run([BlobTrigger("samples-workitems/{name}")] Stream myBlob, string name, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}

Die Zeichenfolge {name} im Blobtriggerpfad samples-workitems/{name} erstellt einen Bindungsausdruck, den Sie im Funktionscode verwenden können, um auf den Dateinamen des auslösenden Blobs zuzugreifen.The string {name} in the blob trigger path samples-workitems/{name} creates a binding expression that you can use in function code to access the file name of the triggering blob. Weitere Informationen finden Sie unter Blobnamensmuster weiter unten in diesem Artikel.For more information, see Blob name patterns later in this article.

Weitere Informationen zum Attribut BlobTrigger finden Sie unter Trigger: Attribute.For more information about the BlobTrigger attribute, see Trigger - attributes.

Trigger: C#-SkriptbeispielTrigger - C# script example

Das folgende Beispiel zeigt eine Blobtriggerbindung in einer Datei function.json und Python-Code, der die Bindung verwendet.The following example shows a blob trigger binding in a function.json file and Python code that uses the binding. Die Funktion schreibt ein Protokoll, wenn im samples-workitems-Container ein Blob hinzugefügt oder aktualisiert wird.The function writes a log when a blob is added or updated in the samples-workitems container.

Bindungsdaten in der Datei function.json:Here's the binding data in the function.json file:

{
    "disabled": false,
    "bindings": [
        {
            "name": "myBlob",
            "type": "blobTrigger",
            "direction": "in",
            "path": "samples-workitems/{name}",
            "connection":"MyStorageAccountAppSetting"
        }
    ]
}

Die Zeichenfolge {name} im Blobtriggerpfad samples-workitems/{name} erstellt einen Bindungsausdruck, den Sie im Funktionscode verwenden können, um auf den Dateinamen des auslösenden Blobs zuzugreifen.The string {name} in the blob trigger path samples-workitems/{name} creates a binding expression that you can use in function code to access the file name of the triggering blob. Weitere Informationen finden Sie unter Blobnamensmuster weiter unten in diesem Artikel.For more information, see Blob name patterns later in this article.

Weitere Informationen zu den Dateieigenschaften von function.json finden Sie im Abschnitt Konfiguration, in dem diese Eigenschaften erläutert werden.For more information about function.json file properties, see the Configuration section explains these properties.

C#-Skriptcode für die Bindung an Stream:Here's C# script code that binds to a Stream:

public static void Run(Stream myBlob, string name, ILogger log)
{
   log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}

C#-Skriptcode für die Bindung an CloudBlockBlob:Here's C# script code that binds to a CloudBlockBlob:

#r "Microsoft.WindowsAzure.Storage"

using Microsoft.WindowsAzure.Storage.Blob;

public static void Run(CloudBlockBlob myBlob, string name, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name}\nURI:{myBlob.StorageUri}");
}

Trigger: JavaScript-BeispielTrigger - JavaScript example

Das folgende Beispiel zeigt eine Blobtriggerbindung in einer Datei function.json und JavaScript-Code, der die Bindung verwendet.The following example shows a blob trigger binding in a function.json file and JavaScript code that uses the binding. Die Funktion schreibt ein Protokoll, wenn im Container samples-workitems ein Blob hinzugefügt oder aktualisiert wird.The function writes a log when a blob is added or updated in the samples-workitems container.

Die Datei function.json sieht wie folgt aus:Here's the function.json file:

{
    "disabled": false,
    "bindings": [
        {
            "name": "myBlob",
            "type": "blobTrigger",
            "direction": "in",
            "path": "samples-workitems/{name}",
            "connection":"MyStorageAccountAppSetting"
        }
    ]
}

Die Zeichenfolge {name} im Blobtriggerpfad samples-workitems/{name} erstellt einen Bindungsausdruck, den Sie im Funktionscode verwenden können, um auf den Dateinamen des auslösenden Blobs zuzugreifen.The string {name} in the blob trigger path samples-workitems/{name} creates a binding expression that you can use in function code to access the file name of the triggering blob. Weitere Informationen finden Sie unter Blobnamensmuster weiter unten in diesem Artikel.For more information, see Blob name patterns later in this article.

Weitere Informationen zu den Dateieigenschaften von function.json finden Sie im Abschnitt Konfiguration, in dem diese Eigenschaften erläutert werden.For more information about function.json file properties, see the Configuration section explains these properties.

Der JavaScript-Code sieht wie folgt aus:Here's the JavaScript code:

module.exports = function(context) {
    context.log('Node.js Blob trigger function processed', context.bindings.myBlob);
    context.done();
};

Trigger: Beispiel für PythonTrigger - Python example

Das folgende Beispiel zeigt eine Blobtriggerbindung in einer Datei function.json und Python-Code, der die Bindung verwendet.The following example shows a blob trigger binding in a function.json file and Python code that uses the binding. Die Funktion schreibt ein Protokoll, wenn im samples-workitems-Container ein Blob hinzugefügt oder aktualisiert wird.The function writes a log when a blob is added or updated in the samples-workitems container.

Die Datei function.json sieht wie folgt aus:Here's the function.json file:

{
    "scriptFile": "__init__.py",
    "disabled": false,
    "bindings": [
        {
            "name": "myblob",
            "type": "blobTrigger",
            "direction": "in",
            "path": "samples-workitems/{name}",
            "connection":"MyStorageAccountAppSetting"
        }
    ]
}

Die Zeichenfolge {name} im Blobtriggerpfad samples-workitems/{name} erstellt einen Bindungsausdruck, den Sie im Funktionscode verwenden können, um auf den Dateinamen des auslösenden Blobs zuzugreifen.The string {name} in the blob trigger path samples-workitems/{name} creates a binding expression that you can use in function code to access the file name of the triggering blob. Weitere Informationen finden Sie unter Blobnamensmuster weiter unten in diesem Artikel.For more information, see Blob name patterns later in this article.

Weitere Informationen zu den Dateieigenschaften von function.json finden Sie im Abschnitt Konfiguration, in dem diese Eigenschaften erläutert werden.For more information about function.json file properties, see the Configuration section explains these properties.

Dies ist der Python-Code:Here's the Python code:

import logging
import azure.functions as func


def main(myblob: func.InputStream):
    logging.info('Python Blob trigger function processed %s', myblob.name)

Trigger: Java-BeispielTrigger - Java example

Das folgende Beispiel zeigt eine Blobtriggerbindung in einer Datei function.json und Java-Code, der die Bindung verwendet.The following example shows a blob trigger binding in a function.json file and Java code that uses the binding. Die Funktion schreibt ein Protokoll, wenn im Container myblob ein Blob hinzugefügt oder aktualisiert wird.The function writes a log when a blob is added or updated in the myblob container.

Die Datei function.json sieht wie folgt aus:Here's the function.json file:

{
    "disabled": false,
    "bindings": [
        {
            "name": "file",
            "type": "blobTrigger",
            "direction": "in",
            "path": "myblob/{name}",
            "connection":"MyStorageAccountAppSetting"
        }
    ]
}

Dies ist der Java-Code:Here's the Java code:

@FunctionName("blobprocessor")
public void run(
  @BlobTrigger(name = "file",
               dataType = "binary",
               path = "myblob/{name}",
               connection = "MyStorageAccountAppSetting") byte[] content,
  @BindingName("name") String filename,
  final ExecutionContext context
) {
  context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
}

Trigger: AttributeTrigger - attributes

Verwenden Sie in C#-Klassenbibliotheken die folgenden Attribute, um einen Blobtrigger zu konfigurieren:In C# class libraries, use the following attributes to configure a blob trigger:

  • BlobTriggerAttributeBlobTriggerAttribute

    Der Konstruktor des Attributs akzeptiert eine Pfadzeichenfolge, die den zu überwachenden Container angibt, und optional ein Blobnamensmuster.The attribute's constructor takes a path string that indicates the container to watch and optionally a blob name pattern. Hier sehen Sie ein Beispiel:Here's an example:

    [FunctionName("ResizeImage")]
    public static void Run(
        [BlobTrigger("sample-images/{name}")] Stream image,
        [Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageSmall)
    {
        ....
    }
    

    Durch Festlegen der Eigenschaft Connection können Sie das zu verwendende Speicherkonto angeben, wie im folgenden Beispiel zu sehen:You can set the Connection property to specify the storage account to use, as shown in the following example:

    [FunctionName("ResizeImage")]
    public static void Run(
        [BlobTrigger("sample-images/{name}", Connection = "StorageConnectionAppSetting")] Stream image,
        [Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageSmall)
    {
        ....
    }
    

    Ein vollständiges Beispiel finden Sie unter Trigger: C#-Beispiel.For a complete example, see Trigger - C# example.

  • StorageAccountAttributeStorageAccountAttribute

    Eine weitere Möglichkeit zum Angeben des zu verwendenden Speicherkontos.Provides another way to specify the storage account to use. Der Konstruktor akzeptiert den Namen einer App-Einstellung mit einer Speicherverbindungszeichenfolge.The constructor takes the name of an app setting that contains a storage connection string. Das Attribut kann auf Parameter-, Methoden- oder Klassenebene angewendet werden.The attribute can be applied at the parameter, method, or class level. Das folgende Beispiel zeigt die Anwendung auf Klassen- und Methodenebene:The following example shows class level and method level:

    [StorageAccount("ClassLevelStorageAppSetting")]
    public static class AzureFunctions
    {
        [FunctionName("BlobTrigger")]
        [StorageAccount("FunctionLevelStorageAppSetting")]
        public static void Run( //...
    {
        ....
    }
    

Das zu verwendende Speicherkonto wird anhand von Folgendem bestimmt (in der angegebenen Reihenfolge):The storage account to use is determined in the following order:

  • Die Eigenschaft Connection des Attributs BlobTrigger.The BlobTrigger attribute's Connection property.
  • Das Attribut StorageAccount, das auf den gleichen Parameter angewendet wird wie das Attribut BlobTrigger.The StorageAccount attribute applied to the same parameter as the BlobTrigger attribute.
  • Das Attribut StorageAccount, das auf die Funktion angewendet wird.The StorageAccount attribute applied to the function.
  • Das Attribut StorageAccount, das auf die Klasse angewendet wird.The StorageAccount attribute applied to the class.
  • Das Standardspeicherkonto für die Funktions-App (App-Einstellung „AzureWebJobsStorage“).The default storage account for the function app ("AzureWebJobsStorage" app setting).

Trigger: KonfigurationTrigger - configuration

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json und im Attribut BlobTrigger festlegen:The following table explains the binding configuration properties that you set in the function.json file and the BlobTrigger attribute.

Eigenschaft von „function.json“function.json property AttributeigenschaftAttribute property BESCHREIBUNGDescription
typetype n/a Muss auf blobTrigger festgelegt sein.Must be set to blobTrigger. Diese Eigenschaft wird automatisch festgelegt, wenn Sie den Trigger im Azure Portal erstellen.This property is set automatically when you create the trigger in the Azure portal.
directiondirection n/a Muss auf in festgelegt sein.Must be set to in. Diese Eigenschaft wird automatisch festgelegt, wenn Sie den Trigger im Azure Portal erstellen.This property is set automatically when you create the trigger in the Azure portal. Ausnahmen sind im Abschnitt Verwendung angegeben.Exceptions are noted in the usage section.
namename n/a Der Name der Variablen, die das Blob im Funktionscode darstellt.The name of the variable that represents the blob in function code.
pathpath BlobPathBlobPath Der zu überwachende Container.The container to monitor. Kann ein Blobnamensmuster sein.May be a blob name pattern.
Verbindungconnection ConnectionConnection Der Name einer App-Einstellung, die die Storage-Verbindungszeichenfolge für diese Bindung enthält.The name of an app setting that contains the Storage connection string to use for this binding. Falls der Name der App-Einstellung mit „AzureWebJobs“ beginnt, können Sie hier nur den Rest des Namens angeben.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Wenn Sie connection also beispielsweise auf „MyStorage“ festlegen, sucht die Functions-Laufzeit nach einer App-Einstellung namens „AzureWebJobsMyStorage“.For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Ohne Angabe für connection verwendet die Functions-Laufzeit die standardmäßige Storage-Verbindungszeichenfolge aus der App-Einstellung AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

Bei der Verbindungszeichenfolge muss es sich um eine Verbindungszeichenfolge für ein allgemeines Speicherkonto (nicht für ein Blobspeicherkonto) handeln.The connection string must be for a general-purpose storage account, not a Blob storage account.

Wenn Sie lokal entwickeln, werden App-Einstellungen in der Datei „local.settings.json“ gespeichert.When you're developing locally, app settings go into the local.settings.json file.

Trigger: VerwendungTrigger - usage

In C#- und C#-Skripts können Sie die folgenden Parametertypen für das auslösende Blob verwenden:In C# and C# script, you can use the following parameter types for the triggering blob:

  • Stream
  • TextReader
  • string
  • Byte[]
  • Ein als JSON serialisierbares POCOA POCO serializable as JSON
  • ICloudBlob1ICloudBlob1
  • CloudBlockBlob1CloudBlockBlob1
  • CloudPageBlob1CloudPageBlob1
  • CloudAppendBlob1CloudAppendBlob1

1 Erfordert die inout-Bindung direction in function.json oder FileAccess.ReadWrite in einer C#-Klassenbibliothek.1 Requires "inout" binding direction in function.json or FileAccess.ReadWrite in a C# class library.

Wenn Sie versuchen, eine Bindung an einen der Storage SDK-Typen herzustellen, und eine Fehlermeldung erhalten, stellen Sie sicher, dass ein Verweis auf die richtige Storage SDK-Version vorliegt.If you try to bind to one of the Storage SDK types and get an error message, make sure that you have a reference to the correct Storage SDK version.

Eine Bindung mit string, Byte[] oder POCO wird nur bei kleinen Blobs empfohlen, da der gesamte Blobinhalt in den Arbeitsspeicher geladen wird.Binding to string, Byte[], or POCO is only recommended if the blob size is small, as the entire blob contents are loaded into memory. Im Allgemeinen ist es günstiger, die Typen Stream oder CloudBlockBlob zu verwenden.Generally, it is preferable to use a Stream or CloudBlockBlob type. Weitere Informationen finden Sie unter Nebenläufigkeit und Arbeitsspeichernutzung weiter unten in diesem Artikel.For more information, see Concurrency and memory usage later in this article.

Verwenden Sie in JavaScript context.bindings.<name from function.json>, um auf die Eingabeblobdaten zuzugreifen.In JavaScript, access the input blob data using context.bindings.<name from function.json>.

Trigger: BlobnamensmusterTrigger - blob name patterns

Ein Blobnamensmuster kann in der Eigenschaft path (in function.json) oder im Konstruktor des Attributs BlobTrigger angegeben werden.You can specify a blob name pattern in the path property in function.json or in the BlobTrigger attribute constructor. Das Namensmuster kann ein Filter oder Bindungsausdruck sein.The name pattern can be a filter or binding expression. Die folgenden Abschnitte enthalten einige Beispiele.The following sections provide examples.

Abrufen von Dateiname und ErweiterungGet file name and extension

Das folgende Beispiel zeigt, wie Sie den Blobdateinamen und die Erweiterung separat binden:The following example shows how to bind to the blob file name and extension separately:

"path": "input/{blobname}.{blobextension}",

Wenn das Blob original-Blob1.txt heißt, lauten die Werte der Variablen blobname und blobextension im Funktionscode original-Blob1 und txt.If the blob is named original-Blob1.txt, the values of the blobname and blobextension variables in function code are original-Blob1 and txt.

Filtern nach BlobnameFilter on blob name

Im folgenden Beispiel wird der Trigger nur für Blobs im Container input ausgelöst, deren Name mit „original-“ beginnt:The following example triggers only on blobs in the input container that start with the string "original-":

"path": "input/original-{name}",

Wenn der Blobname original-Blob1.txt lautet, hat die Variable name im Funktionscode den Wert Blob1.If the blob name is original-Blob1.txt, the value of the name variable in function code is Blob1.

Filtern nach DateitypFilter on file type

Im folgenden Beispiel wird der Trigger nur für PNG-Dateien ausgelöst:The following example triggers only on .png files:

"path": "samples/{name}.png",

Filtern nach geschweiften Klammern in DateinamenFilter on curly braces in file names

Wenn in Dateinamen nach geschweiften Klammern gesucht werden soll, müssen doppelte Klammern verwendet werden.To look for curly braces in file names, escape the braces by using two braces. Im folgenden Beispiel wird nach Blobs gefiltert, deren Name geschweifte Klammern enthält:The following example filters for blobs that have curly braces in the name:

"path": "images/{{20140101}}-{name}",

Wenn der Blobname {20140101}-soundfile.mp3 lautet, erhält die Variable name im Funktionscode den Wert soundfile.mp3.If the blob is named {20140101}-soundfile.mp3, the name variable value in the function code is soundfile.mp3.

Trigger: MetadatenTrigger - metadata

Der Blobtrigger stellt mehrere Metadateneigenschaften bereit.The blob trigger provides several metadata properties. Diese Eigenschaften können als Teil der Bindungsausdrücke in anderen Bindungen oder als Parameter im Code verwendet werden.These properties can be used as part of binding expressions in other bindings or as parameters in your code. Diese Werte haben die gleiche Semantik wie der Typ CloudBlob.These values have the same semantics as the CloudBlob type.

EigenschaftProperty TypType BESCHREIBUNGDescription
BlobTrigger string Der Pfad des auslösenden Blobs.The path to the triggering blob.
Uri System.Uri Der Blob-URI für den primären SpeicherortThe blob's URI for the primary location.
Properties BlobPropertiesBlobProperties Die Systemeigenschaften des BlobsThe blob's system properties.
Metadata IDictionary<string,string> Die benutzerdefinierten Metadaten für das BlobThe user-defined metadata for the blob.

Beispielsweise protokollieren die folgenden C#-Skript- und JavaScript-Beispiele den Pfad zum auslösenden Blob, einschließlich des Containers:For example, the following C# script and JavaScript examples log the path to the triggering blob, including the container:

public static void Run(string myBlob, string blobTrigger, ILogger log)
{
    log.LogInformation($"Full blob path: {blobTrigger}");
} 
module.exports = function (context, myBlob) {
    context.log("Full blob path:", context.bindingData.blobTrigger);
    context.done();
};

Trigger: BlobbelegeTrigger - blob receipts

Die Azure Functions-Runtime stellt sicher, dass Blobtriggerfunktionen für ein neues oder aktualisiertes Blob nicht mehrmals aufgerufen werden.The Azure Functions runtime ensures that no blob trigger function gets called more than once for the same new or updated blob. Zu diesem Zweck wird mittels Verwaltung der Blobbelege ermittelt, ob eine bestimmte Blobversion verarbeitet wurde.To determine if a given blob version has been processed, it maintains blob receipts.

Azure Functions speichert Blobbelege in einem Container mit dem Namen azure-webjobs-hosts im Azure Storage-Konto für Ihre Funktions-App (per App-Einstellung AzureWebJobsStorage definiert).Azure Functions stores blob receipts in a container named azure-webjobs-hosts in the Azure storage account for your function app (defined by the app setting AzureWebJobsStorage). Ein Blobbeleg enthält die folgenden Informationen:A blob receipt has the following information:

  • Die ausgelöste Funktion („ <Funktions-App-Name> .Functions. <Funktionsname> “, z. B.: „MyFunctionApp.Functions.CopyBlob“)The triggered function ("<function app name>.Functions.<function name>", for example: "MyFunctionApp.Functions.CopyBlob")
  • ContainernameThe container name
  • Blobtyp ("BlockBlob" oder "PageBlob")The blob type ("BlockBlob" or "PageBlob")
  • BlobnameThe blob name
  • ETag (eine Blobversions-ID, z.B.: „0x8D1DC6E70A277EF“)The ETag (a blob version identifier, for example: "0x8D1DC6E70A277EF")

Um eine erneute Verarbeitung eines Blobs zu erzwingen, können Sie den Blobbeleg für dieses Blob manuell aus dem Container azure-webjobs-hosts löschen.To force reprocessing of a blob, delete the blob receipt for that blob from the azure-webjobs-hosts container manually. Auch wenn eine erneute Verarbeitung eventuell nicht sofort ausgeführt wird, erfolgt sie doch garantiert zu einem späteren Zeitpunkt.While reprocessing might not occur immediately, it's guaranteed to occur at a later point in time.

Trigger: Nicht verarbeitbare BlobsTrigger - poison blobs

Wenn bei Ausführung einer Blobtriggerfunktion für ein Blob ein Fehler auftritt, versucht Azure Functions standardmäßig bis zu fünfmal, diese Funktion für ein bestimmtes Blob auszuführen.When a blob trigger function fails for a given blob, Azure Functions retries that function a total of 5 times by default.

Wenn bei allen fünf Versuchen Fehler auftreten, fügt Azure Functions der Storage-Warteschlange webjobs-blobtrigger-poison eine Nachricht hinzu.If all 5 tries fail, Azure Functions adds a message to a Storage queue named webjobs-blobtrigger-poison. Die Warteschlangennachricht für nicht verarbeitbare Blobs ist ein JSON-Objekt, das die folgenden Eigenschaften enthält:The queue message for poison blobs is a JSON object that contains the following properties:

  • FunctionId (im Format <Funktionen-App-Name> .Functions. <Funktionsname> )FunctionId (in the format <function app name>.Functions.<function name>)
  • BlobType ("BlockBlob" oder "PageBlob")BlobType ("BlockBlob" or "PageBlob")
  • ContainerNameContainerName
  • BlobNameBlobName
  • ETag (eine Blobversions-ID, z.B.: „0x8D1DC6E70A277EF“)ETag (a blob version identifier, for example: "0x8D1DC6E70A277EF")

Trigger: Nebenläufigkeit und ArbeitsspeichernutzungTrigger - concurrency and memory usage

Der Blobtrigger verwendet intern eine Warteschlange, sodass die maximal zulässige Anzahl gleichzeitiger Funktionsaufrufe durch die Warteschlangenkonfiguration in „host.json“ gesteuert wird.The blob trigger uses a queue internally, so the maximum number of concurrent function invocations is controlled by the queues configuration in host.json. Durch die Standardeinstellungen wird die Anzahl gleichzeitiger Aufrufe auf 24 beschränkt.The default settings limit concurrency to 24 invocations. Dieser Grenzwert gilt separat für jede Funktion, die einen Blobtrigger verwendet.This limit applies separately to each function that uses a blob trigger.

Der Verbrauchstarif schränkt eine Funktions-App auf einem virtuellen Computer (VM) auf 1,5 GB an Arbeitsspeicher ein.The consumption plan limits a function app on one virtual machine (VM) to 1.5 GB of memory. Der Arbeitsspeicher wird von jeder parallel ausgeführten Funktionsinstanz und durch die Functions-Runtime selbst verwendet.Memory is used by each concurrently executing function instance and by the Functions runtime itself. Wenn eine durch einen Blob ausgelöste Funktion das gesamte Blob in den Arbeitsspeicher lädt, entspricht der maximal von dieser Funktion verwendete Arbeitsspeicher nur für Blobs dem 24 * der maximalen Blobgröße.If a blob-triggered function loads the entire blob into memory, the maximum memory used by that function just for blobs is 24 * maximum blob size. Beispiel: Eine Funktions-App, die drei Funktionen mit Blobtrigger umfasst und die Standardeinstellungen verwendet, weist pro VM eine maximale Nebenläufigkeit von 3 * 24 = 72 Funktionsaufrufen auf.For example, a function app with three blob-triggered functions and the default settings would have a maximum per-VM concurrency of 3*24 = 72 function invocations.

JavaScript- und Java-Funktionen laden das gesamte Blob in den Arbeitsspeicher, C#-Funktionen zeigen dieses Verhalten bei einer Bindung an string, Byte[] oder POCO.JavaScript and Java functions load the entire blob into memory, and C# functions do that if you bind to string, Byte[], or POCO.

Trigger: AbrufTrigger - polling

Wenn der überwachte Blobcontainer mehr als 10.000 Blobs (Summe aller Container) enthält, überprüft die Functions-Runtime Protokolldateien auf neue oder geänderte Blobs.If the blob container being monitored contains more than 10,000 blobs (across all containers), the Functions runtime scans log files to watch for new or changed blobs. Dieser Vorgang kann zu Verzögerungen führen.This process can result in delays. Eine Funktion wird unter Umständen erst mehrere Minuten nach der Bloberstellung oder noch später ausgelöst.A function might not get triggered until several minutes or longer after the blob is created.

Warnung

Außerdem erfolgt das Erstellen von Storage-Protokollen auf bestmögliche Weise.In addition, storage logs are created on a "best effort" basis. Es gibt keine Garantie, dass alle Ereignisse erfasst werden.There's no guarantee that all events are captured. Unter bestimmten Umständen können Protokolle fehlen.Under some conditions, logs may be missed.

Wenn eine schnellere oder zuverlässigere Blobverarbeitung erforderlich ist, sollten Sie beim Erstellen des Blobs eine Warteschlangennachricht erstellen.If you require faster or more reliable blob processing, consider creating a queue message when you create the blob. Verwenden Sie dann einen Warteschlangentrigger anstelle eines Blobtriggers für die Verarbeitung des Blobs.Then use a queue trigger instead of a blob trigger to process the blob. Eine andere Möglichkeit ist die Verwendung von Event Grid. Weitere Informationen finden Sie im Tutorial Automatisieren der Größenänderung von hochgeladenen Bildern mit Event Grid.Another option is to use Event Grid; see the tutorial Automate resizing uploaded images using Event Grid.

EingabeInput

Verwenden Sie eine Blobspeicher-Eingabebindung zum Lesen von Blobs.Use a Blob storage input binding to read blobs.

Eingabe: BeispielInput - example

Sehen Sie sich das sprachspezifische Beispiel an:See the language-specific example:

Eingabe – C#-BeispielInput - C# example

Das folgende Beispiel enthält eine C#-Funktion, bei der ein Warteschlangentrigger und eine Eingabeblobbindung verwendet werden.The following example is a C# function that uses a queue trigger and an input blob binding. Die Warteschlangennachricht enthält den Namen des Blobs, und die Funktion protokolliert die Größe des Blobs.The queue message contains the name of the blob, and the function logs the size of the blob.

[FunctionName("BlobInput")]
public static void Run(
    [QueueTrigger("myqueue-items")] string myQueueItem,
    [Blob("samples-workitems/{queueTrigger}", FileAccess.Read)] Stream myBlob,
    ILogger log)
{
    log.LogInformation($"BlobInput processed blob\n Name:{myQueueItem} \n Size: {myBlob.Length} bytes");
}

Eingabe: C#-SkriptbeispielInput - C# script example

Das folgende Beispiel zeigt Blobeingabe- und Blobausgabebindungen in einer Datei vom Typ function.json sowie Code vom Typ C#-Skript (.csx), in dem diese Bindungen verwendet werden.The following example shows blob input and output bindings in a function.json file and C# script (.csx) code that uses the bindings. Die Funktion erstellt eine Kopie eines Textblobs.The function makes a copy of a text blob. Sie wird durch eine Warteschlangennachricht ausgelöst, die den Namen des zu kopierenden Blobs enthält.The function is triggered by a queue message that contains the name of the blob to copy. Der Name des neuen Blobs lautet {Name des Originalblobs}-Copy.The new blob is named {originalblobname}-Copy.

In der Datei function.json wird die Metadateneigenschaft queueTrigger verwendet, um den Blobnamen in den Eigenschaften vom Typ path anzugeben:In the function.json file, the queueTrigger metadata property is used to specify the blob name in the path properties:

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "myQueueItem",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "myInputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "name": "myOutputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}-Copy",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ],
  "disabled": false
}

Weitere Informationen zu diesen Eigenschaften finden Sie im Abschnitt Konfiguration.The configuration section explains these properties.

Der C#-Skriptcode sieht wie folgt aus:Here's the C# script code:

public static void Run(string myQueueItem, string myInputBlob, out string myOutputBlob, ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
    myOutputBlob = myInputBlob;
}

Eingabe: JavaScript-BeispielInput - JavaScript example

Das folgende Beispiel zeigt Blobeingabe- und -ausgabebindungen in einer Datei function.json sowie JavaScript-Skriptcode, der diese Bindungen verwendet.The following example shows blob input and output bindings in a function.json file and JavaScript code that uses the bindings. Die Funktion erstellt eine Kopie eines Blobs.The function makes a copy of a blob. Sie wird durch eine Warteschlangennachricht ausgelöst, die den Namen des zu kopierenden Blobs enthält.The function is triggered by a queue message that contains the name of the blob to copy. Der Name des neuen Blobs lautet {Name des Originalblobs}-Copy.The new blob is named {originalblobname}-Copy.

In der Datei function.json wird die Metadateneigenschaft queueTrigger verwendet, um den Blobnamen in den Eigenschaften vom Typ path anzugeben:In the function.json file, the queueTrigger metadata property is used to specify the blob name in the path properties:

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "myQueueItem",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "myInputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "name": "myOutputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}-Copy",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ],
  "disabled": false
}

Weitere Informationen zu diesen Eigenschaften finden Sie im Abschnitt Konfiguration.The configuration section explains these properties.

Der JavaScript-Code sieht wie folgt aus:Here's the JavaScript code:

module.exports = function(context) {
    context.log('Node.js Queue trigger function processed', context.bindings.myQueueItem);
    context.bindings.myOutputBlob = context.bindings.myInputBlob;
    context.done();
};

Eingabe: Beispiel für PythonInput - Python example

Das folgende Beispiel zeigt Blobeingabe- und -ausgabebindungen in einer Datei function.json sowie Python-Code, der die Bindungen verwendet.The following example shows blob input and output bindings in a function.json file and Python code that uses the bindings. Die Funktion erstellt eine Kopie eines Blobs.The function makes a copy of a blob. Sie wird durch eine Warteschlangennachricht ausgelöst, die den Namen des zu kopierenden Blobs enthält.The function is triggered by a queue message that contains the name of the blob to copy. Der Name des neuen Blobs lautet {Name des Originalblobs}-Copy.The new blob is named {originalblobname}-Copy.

In der Datei function.json wird die Metadateneigenschaft queueTrigger verwendet, um den Blobnamen in den Eigenschaften vom Typ path anzugeben:In the function.json file, the queueTrigger metadata property is used to specify the blob name in the path properties:

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "queuemsg",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "inputblob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "name": "$return",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}-Copy",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ],
  "disabled": false,
  "scriptFile": "__init__.py"
}

Weitere Informationen zu diesen Eigenschaften finden Sie im Abschnitt Konfiguration.The configuration section explains these properties.

Dies ist der Python-Code:Here's the Python code:

import logging
import azure.functions as func


def main(queuemsg: func.QueueMessage, inputblob: func.InputStream) -> func.InputStream:
    logging.info('Python Queue trigger function processed %s', inputblob.name)
    return inputblob

Eingabe: Java-BeispieleInput - Java examples

Dieser Abschnitt enthält folgende Beispiele:This section contains the following examples:

HTTP-Trigger: Suchen des Blobnamens in einer Abfragezeichenfolge (Java)HTTP trigger, look up blob name from query string (Java)

Das folgende Beispiel zeigt eine Java-Funktion, die mithilfe der Anmerkung HttpTrigger einen Parameter mit dem Namen einer Datei in einem Blob Storage-Container empfängt.The following example shows a Java function that uses the HttpTrigger annotation to receive a parameter containing the name of a file in a blob storage container. Die Anmerkung BlobInput liest dann die Datei und übergibt ihren Inhalt als byte[] an die Funktion.The BlobInput annotation then reads the file and passes its contents to the function as a byte[].

  @FunctionName("getBlobSizeHttp")
  @StorageAccount("Storage_Account_Connection_String")
  public HttpResponseMessage blobSize(
    @HttpTrigger(name = "req", 
      methods = {HttpMethod.GET}, 
      authLevel = AuthorizationLevel.ANONYMOUS) 
    HttpRequestMessage<Optional<String>> request,
    @BlobInput(
      name = "file", 
      dataType = "binary", 
      path = "samples-workitems/{Query.file}") 
    byte[] content,
    final ExecutionContext context) {
      // build HTTP response with size of requested blob
      return request.createResponseBuilder(HttpStatus.OK)
        .body("The size of \"" + request.getQueryParameters().get("file") + "\" is: " + content.length + " bytes")
        .build();
  }

Warteschlangentrigger: Empfangen des Blobnamens aus einer Warteschlangennachricht (Java)Queue trigger, receive blob name from queue message (Java)

Das folgende Beispiel zeigt eine Java-Funktion, die mithilfe der QueueTrigger-Anmerkung eine Nachricht mit dem Namen einer Datei in einem Blob Storage-Container empfängt.The following example shows a Java function that uses the QueueTrigger annotation to receive a message containing the name of a file in a blob storage container. Die Anmerkung BlobInput liest dann die Datei und übergibt ihren Inhalt als byte[] an die Funktion.The BlobInput annotation then reads the file and passes its contents to the function as a byte[].

  @FunctionName("getBlobSize")
  @StorageAccount("Storage_Account_Connection_String")
  public void blobSize(
    @QueueTrigger(
      name = "filename", 
      queueName = "myqueue-items-sample") 
    String filename,
    @BlobInput(
      name = "file", 
      dataType = "binary", 
      path = "samples-workitems/{queueTrigger}") 
    byte[] content,
    final ExecutionContext context) {
      context.getLogger().info("The size of \"" + filename + "\" is: " + content.length + " bytes");
  }

Verwenden Sie die @BlobInput-Anmerkung in der Laufzeitbibliothek für Java-Funktionen für Parameter, deren Wert aus einem Blob empfangen wird.In the Java functions runtime library, use the @BlobInput annotation on parameters whose value would come from a blob. Diese Anmerkung kann mit nativen Java-Typen, POJOs oder Werten mit Optional<T>, die NULL-Werte annehmen können, verwendet werden.This annotation can be used with native Java types, POJOs, or nullable values using Optional<T>.

Eingabe: AttributeInput - attributes

Verwenden Sie in C#-Klassenbibliotheken das Attribut BlobAttribute.In C# class libraries, use the BlobAttribute.

Der Konstruktor des Attributs akzeptiert den Pfad des Blobs sowie einen Parameter vom Typ FileAccess, der angibt, ob es sich um einen Lesevorgang oder um einen Schreibvorgang handelt. Beispiel:The attribute's constructor takes the path to the blob and a FileAccess parameter indicating read or write, as shown in the following example:

[FunctionName("BlobInput")]
public static void Run(
    [QueueTrigger("myqueue-items")] string myQueueItem,
    [Blob("samples-workitems/{queueTrigger}", FileAccess.Read)] Stream myBlob,
    ILogger log)
{
    log.LogInformation($"BlobInput processed blob\n Name:{myQueueItem} \n Size: {myBlob.Length} bytes");
}

Durch Festlegen der Eigenschaft Connection können Sie das zu verwendende Speicherkonto angeben, wie im folgenden Beispiel zu sehen:You can set the Connection property to specify the storage account to use, as shown in the following example:

[FunctionName("BlobInput")]
public static void Run(
    [QueueTrigger("myqueue-items")] string myQueueItem,
    [Blob("samples-workitems/{queueTrigger}", FileAccess.Read, Connection = "StorageConnectionAppSetting")] Stream myBlob,
    ILogger log)
{
    log.LogInformation($"BlobInput processed blob\n Name:{myQueueItem} \n Size: {myBlob.Length} bytes");
}

Mit dem Attribut StorageAccount können Sie das Speicherkonto auf Klassen-, Methoden- oder Parameterebene angeben.You can use the StorageAccount attribute to specify the storage account at class, method, or parameter level. Weitere Informationen finden Sie unter Trigger: Attribute.For more information, see Trigger - attributes.

Eingabe: KonfigurationInput - configuration

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json und im Attribut Blob festlegen:The following table explains the binding configuration properties that you set in the function.json file and the Blob attribute.

Eigenschaft von „function.json“function.json property AttributeigenschaftAttribute property BESCHREIBUNGDescription
typetype n/a Muss auf blob festgelegt sein.Must be set to blob.
directiondirection n/a Muss auf in festgelegt sein.Must be set to in. Ausnahmen sind im Abschnitt Verwendung angegeben.Exceptions are noted in the usage section.
namename n/a Der Name der Variablen, die das Blob im Funktionscode darstellt.The name of the variable that represents the blob in function code.
pathpath BlobPathBlobPath Der Pfad des Blobs.The path to the blob.
Verbindungconnection ConnectionConnection Der Name einer App-Einstellung, die die Speicherverbindungszeichenfolge für diese Bindung enthält.The name of an app setting that contains the Storage connection string to use for this binding. Falls der Name der App-Einstellung mit „AzureWebJobs“ beginnt, können Sie hier nur den Rest des Namens angeben.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Wenn Sie connection also beispielsweise auf „MyStorage“ festlegen, sucht die Functions-Laufzeit nach einer App-Einstellung namens „AzureWebJobsMyStorage“.For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Ohne Angabe für connection verwendet die Functions-Laufzeit die standardmäßige Storage-Verbindungszeichenfolge aus der App-Einstellung AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

Bei der Verbindungszeichenfolge muss es sich um eine Verbindungszeichenfolge für ein allgemeines Speicherkonto (nicht für ein reines Blob Storage-Konto) handeln.The connection string must be for a general-purpose storage account, not a blob-only storage account.
n/a zugreifenAccess Gibt an, ob Sie einen Lesevorgang oder einen Schreibvorgang ausführen möchten.Indicates whether you will be reading or writing.

Wenn Sie lokal entwickeln, werden App-Einstellungen in der Datei „local.settings.json“ gespeichert.When you're developing locally, app settings go into the local.settings.json file.

Eingabe: VerwendungInput - usage

In C#- und C#-Skripts können Sie die folgenden Parametertypen für die Blobeingabebindung verwenden:In C# and C# script, you can use the following parameter types for the blob input binding:

  • Stream
  • TextReader
  • string
  • Byte[]
  • CloudBlobContainer
  • CloudBlobDirectory
  • ICloudBlob1ICloudBlob1
  • CloudBlockBlob1CloudBlockBlob1
  • CloudPageBlob1CloudPageBlob1
  • CloudAppendBlob1CloudAppendBlob1

1 Erfordert die inout-Bindung direction in function.json oder FileAccess.ReadWrite in einer C#-Klassenbibliothek.1 Requires "inout" binding direction in function.json or FileAccess.ReadWrite in a C# class library.

Wenn Sie versuchen, eine Bindung an einen der Storage SDK-Typen herzustellen, und eine Fehlermeldung erhalten, stellen Sie sicher, dass ein Verweis auf die richtige Storage SDK-Version vorliegt.If you try to bind to one of the Storage SDK types and get an error message, make sure that you have a reference to the correct Storage SDK version.

Eine Bindung mit string oder Byte[] wird nur bei kleinen Blobs empfohlen, da der gesamte Blobinhalt in den Arbeitsspeicher geladen wird.Binding to string or Byte[] is only recommended if the blob size is small, as the entire blob contents are loaded into memory. Im Allgemeinen ist es günstiger, die Typen Stream oder CloudBlockBlob zu verwenden.Generally, it is preferable to use a Stream or CloudBlockBlob type. Weitere Informationen finden Sie unter Nebenläufigkeit und Arbeitsspeichernutzung weiter oben in diesem Artikel.For more information, see Concurrency and memory usage earlier in this article.

Verwenden Sie in JavaScript context.bindings.<name from function.json>, um auf die Blobdaten zuzugreifen.In JavaScript, access the blob data using context.bindings.<name from function.json>.

OutputOutput

Verwenden Sie Blobspeicher-Ausgabebindungen, um Blobs zu schreiben.Use Blob storage output bindings to write blobs.

Ausgabe: BeispielOutput - example

Sehen Sie sich das sprachspezifische Beispiel an:See the language-specific example:

Ausgabe: C#-BeispielOutput - C# example

In der C#-Funktion im folgenden Beispiel werden ein Blobtrigger und zwei Ausgabeblobbindungen verwendet.The following example is a C# function that uses a blob trigger and two output blob bindings. Die Funktion wird durch die Erstellung eines Bildblobs im Container sample-images ausgelöst.The function is triggered by the creation of an image blob in the sample-images container. Sie erstellt kleine und mittelgroße Kopien der Bildblobs.It creates small and medium size copies of the image blob.

[FunctionName("ResizeImage")]
public static void Run(
    [BlobTrigger("sample-images/{name}")] Stream image,
    [Blob("sample-images-sm/{name}", FileAccess.Write)] Stream imageSmall,
    [Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageMedium)
{
    var imageBuilder = ImageResizer.ImageBuilder.Current;
    var size = imageDimensionsTable[ImageSize.Small];

    imageBuilder.Build(image, imageSmall,
        new ResizeSettings(size.Item1, size.Item2, FitMode.Max, null), false);

    image.Position = 0;
    size = imageDimensionsTable[ImageSize.Medium];

    imageBuilder.Build(image, imageMedium,
        new ResizeSettings(size.Item1, size.Item2, FitMode.Max, null), false);
}

public enum ImageSize { ExtraSmall, Small, Medium }

private static Dictionary<ImageSize, (int, int)> imageDimensionsTable = new Dictionary<ImageSize, (int, int)>() {
    { ImageSize.ExtraSmall, (320, 200) },
    { ImageSize.Small,      (640, 400) },
    { ImageSize.Medium,     (800, 600) }
};

Ausgabe: C#-SkriptbeispielOutput - C# script example

Das folgende Beispiel zeigt Blobeingabe- und Blobausgabebindungen in einer Datei vom Typ function.json sowie Code vom Typ C#-Skript (.csx), in dem diese Bindungen verwendet werden.The following example shows blob input and output bindings in a function.json file and C# script (.csx) code that uses the bindings. Die Funktion erstellt eine Kopie eines Textblobs.The function makes a copy of a text blob. Sie wird durch eine Warteschlangennachricht ausgelöst, die den Namen des zu kopierenden Blobs enthält.The function is triggered by a queue message that contains the name of the blob to copy. Der Name des neuen Blobs lautet {Name des Originalblobs}-Copy.The new blob is named {originalblobname}-Copy.

In der Datei function.json wird die Metadateneigenschaft queueTrigger verwendet, um den Blobnamen in den Eigenschaften vom Typ path anzugeben:In the function.json file, the queueTrigger metadata property is used to specify the blob name in the path properties:

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "myQueueItem",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "myInputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "name": "myOutputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}-Copy",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ],
  "disabled": false
}

Weitere Informationen zu diesen Eigenschaften finden Sie im Abschnitt Konfiguration.The configuration section explains these properties.

Der C#-Skriptcode sieht wie folgt aus:Here's the C# script code:

public static void Run(string myQueueItem, string myInputBlob, out string myOutputBlob, ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
    myOutputBlob = myInputBlob;
}

Ausgabe: JavaScript-BeispielOutput - JavaScript example

Das folgende Beispiel zeigt Blobeingabe- und -ausgabebindungen in einer Datei function.json sowie JavaScript-Skriptcode, der diese Bindungen verwendet.The following example shows blob input and output bindings in a function.json file and JavaScript code that uses the bindings. Die Funktion erstellt eine Kopie eines Blobs.The function makes a copy of a blob. Sie wird durch eine Warteschlangennachricht ausgelöst, die den Namen des zu kopierenden Blobs enthält.The function is triggered by a queue message that contains the name of the blob to copy. Der Name des neuen Blobs lautet {Name des Originalblobs}-Copy.The new blob is named {originalblobname}-Copy.

In der Datei function.json wird die Metadateneigenschaft queueTrigger verwendet, um den Blobnamen in den Eigenschaften vom Typ path anzugeben:In the function.json file, the queueTrigger metadata property is used to specify the blob name in the path properties:

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "myQueueItem",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "myInputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "name": "myOutputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}-Copy",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ],
  "disabled": false
}

Weitere Informationen zu diesen Eigenschaften finden Sie im Abschnitt Konfiguration.The configuration section explains these properties.

Der JavaScript-Code sieht wie folgt aus:Here's the JavaScript code:

module.exports = function(context) {
    context.log('Node.js Queue trigger function processed', context.bindings.myQueueItem);
    context.bindings.myOutputBlob = context.bindings.myInputBlob;
    context.done();
};

Ausgabe: Beispiel für PythonOutput - Python example

Das folgende Beispiel zeigt Blobeingabe- und -ausgabebindungen in einer Datei function.json sowie Python-Code, der die Bindungen verwendet.The following example shows blob input and output bindings in a function.json file and Python code that uses the bindings. Die Funktion erstellt eine Kopie eines Blobs.The function makes a copy of a blob. Sie wird durch eine Warteschlangennachricht ausgelöst, die den Namen des zu kopierenden Blobs enthält.The function is triggered by a queue message that contains the name of the blob to copy. Der Name des neuen Blobs lautet {Name des Originalblobs}-Copy.The new blob is named {originalblobname}-Copy.

In der Datei function.json wird die Metadateneigenschaft queueTrigger verwendet, um den Blobnamen in den Eigenschaften vom Typ path anzugeben:In the function.json file, the queueTrigger metadata property is used to specify the blob name in the path properties:

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "queuemsg",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "inputblob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "name": "outputblob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}-Copy",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ],
  "disabled": false,
  "scriptFile": "__init__.py"
}

Weitere Informationen zu diesen Eigenschaften finden Sie im Abschnitt Konfiguration.The configuration section explains these properties.

Dies ist der Python-Code:Here's the Python code:

import logging
import azure.functions as func


def main(queuemsg: func.QueueMessage, inputblob: func.InputStream,
         outputblob: func.Out[func.InputStream]):
    logging.info('Python Queue trigger function processed %s', inputblob.name)
    outputblob.set(inputblob)

Ausgabe: Java-BeispieleOutput - Java examples

Dieser Abschnitt enthält folgende Beispiele:This section contains the following examples:

HTTP-Trigger mit OutputBinding (Java)HTTP trigger, using OutputBinding (Java)

Das folgende Beispiel zeigt eine Java-Funktion, die mithilfe der Anmerkung HttpTrigger einen Parameter mit dem Namen einer Datei in einem Blob Storage-Container empfängt.The following example shows a Java function that uses the HttpTrigger annotation to receive a parameter containing the name of a file in a blob storage container. Die Anmerkung BlobInput liest dann die Datei und übergibt ihren Inhalt als byte[] an die Funktion.The BlobInput annotation then reads the file and passes its contents to the function as a byte[]. Die Anmerkung BlobOutput bindet an OutputBinding outputItem, das dann von der Funktion verwendet wird, um den Inhalt des Eingabeblobs in den konfigurierten Speichercontainer zu schreiben.The BlobOutput annotation binds to OutputBinding outputItem, which is then used by the function to write the contents of the input blob to the configured storage container.

  @FunctionName("copyBlobHttp")
  @StorageAccount("Storage_Account_Connection_String")
  public HttpResponseMessage copyBlobHttp(
    @HttpTrigger(name = "req", 
      methods = {HttpMethod.GET}, 
      authLevel = AuthorizationLevel.ANONYMOUS) 
    HttpRequestMessage<Optional<String>> request,
    @BlobInput(
      name = "file", 
      dataType = "binary", 
      path = "samples-workitems/{Query.file}") 
    byte[] content,
    @BlobOutput(
      name = "target", 
      path = "myblob/{Query.file}-CopyViaHttp")
    OutputBinding<String> outputItem,
    final ExecutionContext context) {
      // Save blob to outputItem
      outputItem.setValue(new String(content, StandardCharsets.UTF_8));

      // build HTTP response with size of requested blob
      return request.createResponseBuilder(HttpStatus.OK)
        .body("The size of \"" + request.getQueryParameters().get("file") + "\" is: " + content.length + " bytes")
        .build();
  }

Warteschlangentrigger mit Funktionsrückgabewert (Java)Queue trigger, using function return value (Java)

Das folgende Beispiel zeigt eine Java-Funktion, die mithilfe der QueueTrigger-Anmerkung eine Nachricht mit dem Namen einer Datei in einem Blob Storage-Container empfängt.The following example shows a Java function that uses the QueueTrigger annotation to receive a message containing the name of a file in a blob storage container. Die Anmerkung BlobInput liest dann die Datei und übergibt ihren Inhalt als byte[] an die Funktion.The BlobInput annotation then reads the file and passes its contents to the function as a byte[]. Die BlobOutput-Anmerkung bindet an den Rückgabewert der Funktion, der dann von der Runtime verwendet wird, um den Inhalt des Eingabeblobs in den konfigurierten Speichercontainer zu schreiben.The BlobOutput annotation binds to the function return value, which is then used by the runtime to write the contents of the input blob to the configured storage container.

  @FunctionName("copyBlobQueueTrigger")
  @StorageAccount("Storage_Account_Connection_String")
  @BlobOutput(
    name = "target", 
    path = "myblob/{queueTrigger}-Copy")
  public String copyBlobQueue(
    @QueueTrigger(
      name = "filename", 
      dataType = "string",
      queueName = "myqueue-items") 
    String filename,
    @BlobInput(
      name = "file", 
      path = "samples-workitems/{queueTrigger}") 
    String content,
    final ExecutionContext context) {
      context.getLogger().info("The content of \"" + filename + "\" is: " + content);
      return content;
  }

Verwenden Sie die @BlobOutput-Anmerkung in der Laufzeitbibliothek für Java-Funktionen für Funktionsparameter, deren Wert in ein Objekt in Blob Storage geschrieben wird.In the Java functions runtime library, use the @BlobOutput annotation on function parameters whose value would be written to an object in blob storage. Der Parametertyp sollte OutputBinding<T> lauten, wobei „T“ für einen beliebigen nativen Java-Typ oder ein POJO steht.The parameter type should be OutputBinding<T>, where T is any native Java type or a POJO.

Ausgabe: AttributeOutput - attributes

Verwenden Sie in C#-Klassenbibliotheken das Attribut BlobAttribute.In C# class libraries, use the BlobAttribute.

Der Konstruktor des Attributs akzeptiert den Pfad des Blobs sowie einen Parameter vom Typ FileAccess, der angibt, ob es sich um einen Lesevorgang oder um einen Schreibvorgang handelt. Beispiel:The attribute's constructor takes the path to the blob and a FileAccess parameter indicating read or write, as shown in the following example:

[FunctionName("ResizeImage")]
public static void Run(
    [BlobTrigger("sample-images/{name}")] Stream image,
    [Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageSmall)
{
    ...
}

Durch Festlegen der Eigenschaft Connection können Sie das zu verwendende Speicherkonto angeben, wie im folgenden Beispiel zu sehen:You can set the Connection property to specify the storage account to use, as shown in the following example:

[FunctionName("ResizeImage")]
public static void Run(
    [BlobTrigger("sample-images/{name}")] Stream image,
    [Blob("sample-images-md/{name}", FileAccess.Write, Connection = "StorageConnectionAppSetting")] Stream imageSmall)
{
    ...
}

Ein vollständiges Beispiel finden Sie unter Ausgabe: C#-Beispiel.For a complete example, see Output - C# example.

Mit dem Attribut StorageAccount können Sie das Speicherkonto auf Klassen-, Methoden- oder Parameterebene angeben.You can use the StorageAccount attribute to specify the storage account at class, method, or parameter level. Weitere Informationen finden Sie unter Trigger: Attribute.For more information, see Trigger - attributes.

Ausgabe: KonfigurationOutput - configuration

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json und im Attribut Blob festlegen:The following table explains the binding configuration properties that you set in the function.json file and the Blob attribute.

Eigenschaft von „function.json“function.json property AttributeigenschaftAttribute property BESCHREIBUNGDescription
typetype n/a Muss auf blob festgelegt sein.Must be set to blob.
directiondirection n/a Muss für eine Ausgabebindung auf out festgelegt werden.Must be set to out for an output binding. Ausnahmen sind im Abschnitt Verwendung angegeben.Exceptions are noted in the usage section.
namename n/a Der Name der Variablen, die das Blob im Funktionscode darstellt.The name of the variable that represents the blob in function code. Legen Sie diesen Wert auf $return fest, um auf den Rückgabewert der Funktion zu verweisen.Set to $return to reference the function return value.
pathpath BlobPathBlobPath Der Pfad zum Blobcontainer.The path to the blob container.
Verbindungconnection ConnectionConnection Der Name einer App-Einstellung, die die Storage-Verbindungszeichenfolge für diese Bindung enthält.The name of an app setting that contains the Storage connection string to use for this binding. Falls der Name der App-Einstellung mit „AzureWebJobs“ beginnt, können Sie hier nur den Rest des Namens angeben.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Wenn Sie connection also beispielsweise auf „MyStorage“ festlegen, sucht die Functions-Laufzeit nach einer App-Einstellung namens „AzureWebJobsMyStorage“.For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Ohne Angabe für connection verwendet die Functions-Laufzeit die standardmäßige Storage-Verbindungszeichenfolge aus der App-Einstellung AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

Bei der Verbindungszeichenfolge muss es sich um eine Verbindungszeichenfolge für ein allgemeines Speicherkonto (nicht für ein reines Blob Storage-Konto) handeln.The connection string must be for a general-purpose storage account, not a blob-only storage account.
n/a zugreifenAccess Gibt an, ob Sie einen Lesevorgang oder einen Schreibvorgang ausführen möchten.Indicates whether you will be reading or writing.

Wenn Sie lokal entwickeln, werden App-Einstellungen in der Datei „local.settings.json“ gespeichert.When you're developing locally, app settings go into the local.settings.json file.

Ausgabe: VerwendungOutput - usage

In C#- und C#-Skript können Sie sich an die folgenden Typen binden, um Blobs zu schreiben:In C# and C# script, you can bind to the following types to write blobs:

  • TextWriter
  • out string
  • out Byte[]
  • CloudBlobStream
  • Stream
  • CloudBlobContainer1CloudBlobContainer1
  • CloudBlobDirectory
  • ICloudBlob2ICloudBlob2
  • CloudBlockBlob2CloudBlockBlob2
  • CloudPageBlob2CloudPageBlob2
  • CloudAppendBlob2CloudAppendBlob2

1 Erfordert die in-Bindung direction in function.json oder FileAccess.Read in einer C#-Klassenbibliothek.1 Requires "in" binding direction in function.json or FileAccess.Read in a C# class library. Allerdings können Sie das Containerobjekt verwenden, das die Runtime für Schreibvorgänge bereitstellt (z.B. zum Hochladen von Blobs in den Container).However, you can use the container object that the runtime provides to do write operations, such as uploading blobs to the container.

2 Erfordert die inout-Bindung direction in function.json oder FileAccess.ReadWrite in einer C#-Klassenbibliothek.2 Requires "inout" binding direction in function.json or FileAccess.ReadWrite in a C# class library.

Wenn Sie versuchen, eine Bindung an einen der Storage SDK-Typen herzustellen, und eine Fehlermeldung erhalten, stellen Sie sicher, dass ein Verweis auf die richtige Storage SDK-Version vorliegt.If you try to bind to one of the Storage SDK types and get an error message, make sure that you have a reference to the correct Storage SDK version.

In asynchronen Funktionen verwenden Sie den Rückgabewert oder IAsyncCollector anstelle eines out-Parameters.In async functions, use the return value or IAsyncCollector instead of an out parameter.

Eine Bindung mit string oder Byte[] wird nur bei kleinen Blobs empfohlen, da der gesamte Blobinhalt in den Arbeitsspeicher geladen wird.Binding to string or Byte[] is only recommended if the blob size is small, as the entire blob contents are loaded into memory. Im Allgemeinen ist es günstiger, die Typen Stream oder CloudBlockBlob zu verwenden.Generally, it is preferable to use a Stream or CloudBlockBlob type. Weitere Informationen finden Sie unter Nebenläufigkeit und Arbeitsspeichernutzung weiter oben in diesem Artikel.For more information, see Concurrency and memory usage earlier in this article.

Verwenden Sie in JavaScript context.bindings.<name from function.json>, um auf die Blobdaten zuzugreifen.In JavaScript, access the blob data using context.bindings.<name from function.json>.

Ausnahmen und RückgabecodesExceptions and return codes

BindungBinding VerweisReference
BlobBlob BlobfehlercodesBlob Error Codes
Blob, Tabelle, WarteschlangeBlob, Table, Queue SpeicherfehlercodesStorage Error Codes
Blob, Tabelle, WarteschlangeBlob, Table, Queue ProblembehandlungTroubleshooting

Nächste SchritteNext steps