Binding dell'archiviazione BLOB di Azure per Funzioni di AzureAzure Blob storage bindings for Azure Functions

Questo articolo illustra come operare con le associazioni dell'archiviazione BLOB di Azure in Funzioni di Azure.This article explains how to work with Azure Blob storage bindings in Azure Functions. Funzioni di Azure supporta le associazioni di trigger, input e output per i BLOB.Azure Functions supports trigger, input, and output bindings for blobs. L'articolo include una sezione per ogni binding:The article includes a section for each binding:

Informazioni di riferimento per gli sviluppatori delle Funzioni di Azure.This is reference information for Azure Functions developers. Se non si ha familiarità con le Funzioni di Azure, iniziare con le seguenti risorse:If you're new to Azure Functions, start with the following resources:

Nota

Usare il trigger di Griglia di eventi anziché il trigger di archiviazione BLOB per gli account di archiviazione solo BLOB, per la scalabilità elevata, o per evitare ritardi di avvio a freddo.Use the Event Grid trigger instead of the Blob storage trigger for blob-only storage accounts, for high scale, or to avoid cold-start delays. Per altre informazioni, vedere la sezione Trigger.For more information, see the Trigger section.

Pacchetti: Funzioni 1.xPackages - Functions 1.x

Le associazioni di archiviazione BLOB sono incluse nel pacchetto NuGet Microsoft.Azure.WebJobs versione 2.x.The Blob storage bindings are provided in the Microsoft.Azure.WebJobs NuGet package, version 2.x. Il codice sorgente del pacchetto si trova nel repository GitHub azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

Il supporto per questa associazione viene fornito automaticamente in tutti gli ambienti di sviluppo.Support for this binding is automatically provided in all development environments. Non è necessario installare il pacchetto o registrare l'estensione manualmente.You don't have to manually install the package or register the extension.

Pacchetti: Funzioni 2.xPackages - Functions 2.x

Le associazioni di archiviazione BLOB sono incluse nel pacchetto NuGet Microsoft.Azure.WebJobs versione 3.x.The Blob storage bindings are provided in the Microsoft.Azure.WebJobs NuGet package, version 3.x. Il codice sorgente del pacchetto si trova nel repository GitHub azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

Il supporto per questa associazione viene fornito automaticamente in tutti gli ambienti di sviluppo.Support for this binding is automatically provided in all development environments. Non è necessario installare il pacchetto o registrare l'estensione manualmente.You don't have to manually install the package or register the extension.

Versione di Azure Storage SDK in Funzioni 1.xAzure Storage SDK version in Functions 1.x

In Funzioni 1.x, i trigger di archiviazione e le associazioni usano la versione 7.2.1 di Azure Storage SDK (pacchetto NuGet 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). Se si fa riferimento a una versione diversa di Storage SDK e si imposta l'associazione a un tipo di Storage SDK nella firma della funzione, il runtime di Funzioni può segnalare che non è possibile l'associazione a quel tipo.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. La soluzione consiste nell'assicurarsi che il progetto faccia riferimento a WindowsAzure.Storage 7.2.1.The solution is to make sure your project references WindowsAzure.Storage 7.2.1.

TriggerTrigger

Il trigger di archiviazione BLOB avvia una funzione quando viene rilevato un BLOB nuovo o aggiornato.The Blob storage trigger starts a function when a new or updated blob is detected. I contenuti del BLOB vengono dati come input alla funzione.The blob contents are provided as input to the function.

Il trigger di Griglia di eventi include il supporto incorporato per gli eventi BLOB e può essere usato anche per avviare una funzione quando viene rilevato un BLOB nuovo o aggiornato.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. Per un esempio, vedere l'esercitazione Ridimensionamento di immagini con Griglia di eventi.For an example, see the Image resize with Event Grid tutorial.

Usare Griglia eventi anziché il trigger di archiviazione BLOB per gli scenari seguenti:Use Event Grid instead of the Blob storage trigger for the following scenarios:

  • Account di archiviazione solo BLOBBlob-only storage accounts
  • Scalabilità elevataHigh scale
  • Ritardo di avvio a freddoCold-start delay

Account di archiviazione solo BLOBBlob-only storage accounts

Gli account di archiviazione solo BLOB sono supportati per le associazioni di input e output BLOB, ma non per i trigger BLOB.Blob-only storage accounts are supported for blob input and output bindings but not for blob triggers. I trigger di BLOB richiedono un account di archiviazione generico.Blob storage triggers require a general-purpose storage account.

Scalabilità elevataHigh scale

La scalabilità elevata può essere definita in modo generico come i contenitori con più di 100.000 BLOB o gli account di archiviazione con più di 100 aggiornamenti BLOB al secondo.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.

Ritardo di avvio a freddoCold-start delay

Se l'app per le funzioni è inclusa nel piano a consumo, è possibile che si verifichi un ritardo di un massimo di 10 minuti per l'elaborazione di nuovi BLOB in caso di inattività di un'app per le funzioni.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. Per evitare questo ritardo di avvio a freddo, è possibile passare a un piano di servizio app con Always On abilitato o usare un tipo di trigger diverso.To avoid this cold-start delay, you can switch to an App Service plan with Always On enabled, or use a different trigger type.

Trigger per l'archiviazione codeQueue storage trigger

Oltre alla Griglia di eventi, un'alternativa per l'elaborazione di BLOB è il trigger di archiviazione code, che tuttavia non include un supporto integrato per gli eventi BLOB.Besides Event Grid, another alternative for processing blobs is the Queue storage trigger, but it has no built-in support for blob events. È necessario creare messaggi della coda quando si creano o aggiornano i BLOB.You would have to create queue messages when creating or updating blobs. Per un esempio in cui si presuppone che sia stata eseguita l'operazione, vedere l'esempio di associazione di input BLOB più avanti in questo articolo.For an example that assumes you've done that, see the blob input binding example later in this article.

Trigger - esempioTrigger - example

Vedere l'esempio specifico per ciascun linguaggio:See the language-specific example:

Trigger - esempio in C#Trigger - C# example

L'esempio seguente illustra una funzione C# che scrive un log quando viene aggiunto o aggiornato un BLOB nel contenitore samples-workitems.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, TraceWriter log)
{
    log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}

La stringa {name} nel percorso del trigger di BLOB samples-workitems/{name} crea un'espressione di associazione che può essere usata nel codice della funzione per accedere al nome file del BLOB di attivazione.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. Per altre informazioni, vedere Modelli di nome dei BLOB più avanti in questo articolo.For more information, see Blob name patterns later in this article.

Per altre informazioni sull'attributo BlobTrigger, vedere Trigger - attributi.For more information about the BlobTrigger attribute, see Trigger - attributes.

Trigger - esempio di script C#Trigger - C# script example

L'esempio seguente illustra un'associazione di trigger di BLOB in un file function.json e codice script C# (.csx) che usa l'associazione.The following example shows a blob trigger binding in a function.json file and C# script (.csx) code that uses the binding. La funzione scrive un log quando viene aggiunto o aggiornato un BLOB nel contenitore samples-workitems.The function writes a log when a blob is added or updated in the samples-workitems container.

Ecco i dati di associazione nel file 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"
        }
    ]
}

La stringa {name} nel percorso del trigger di BLOB samples-workitems/{name} crea un'espressione di associazione che può essere usata nel codice della funzione per accedere al nome file del BLOB di attivazione.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. Per altre informazioni, vedere Modelli di nome dei BLOB più avanti in questo articolo.For more information, see Blob name patterns later in this article.

Per altre informazioni sulle proprietà del file function.json, vedere la sezione Configurazione che spiega queste proprietà.For more information about function.json file properties, see the Configuration section explains these properties.

Ecco il codice script C# associato a un oggetto Stream:Here's C# script code that binds to a Stream:

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

Ecco il codice script C# associato a un oggetto 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, TraceWriter log)
{
    log.Info($"C# Blob trigger function Processed blob\n Name:{name}\nURI:{myBlob.StorageUri}");
}

Trigger - esempio JavaScriptTrigger - JavaScript example

L'esempio seguente illustra un'associazione di trigger di BLOB in un file function.json e il codice JavaScript che usa l'associazione.The following example shows a blob trigger binding in a function.json file and JavaScript code that uses the binding. La funzione scrive un log quando viene aggiunto o aggiornato un BLOB nel contenitore samples-workitems.The function writes a log when a blob is added or updated in the samples-workitems container.

Ecco il file function.json:Here's the function.json file:

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

La stringa {name} nel percorso del trigger di BLOB samples-workitems/{name} crea un'espressione di associazione che può essere usata nel codice della funzione per accedere al nome file del BLOB di attivazione.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. Per altre informazioni, vedere Modelli di nome dei BLOB più avanti in questo articolo.For more information, see Blob name patterns later in this article.

Per altre informazioni sulle proprietà del file function.json, vedere la sezione Configurazione che spiega queste proprietà.For more information about function.json file properties, see the Configuration section explains these properties.

Ecco il codice JavaScript:Here's the JavaScript code:

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

Trigger - attributiTrigger - attributes

Nelle librerie di classi usare i seguenti attributi per configurare un trigger di BLOB:In C# class libraries, use the following attributes to configure a blob trigger:

  • BlobTriggerAttributeBlobTriggerAttribute

    L'attributo del costruttore accetta una stringa di percorso che indica il contenitore per il controllo e, facoltativamente, un modello di nome per il BLOB.The attribute's constructor takes a path string that indicates the container to watch and optionally a blob name pattern. Ad esempio: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)
    {
        ....
    }
    

    È possibile impostare la proprietà Connection per specificare l'account di archiviazione da usare, come illustrato nell'esempio seguente: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)
    {
       ....
    }
    

    Per un esempio completo, vedere Trigger - esempio in C#.For a complete example, see Trigger - C# example.

  • StorageAccountAttributeStorageAccountAttribute

    Offre un altro modo per specificare l'account di archiviazione da usare.Provides another way to specify the storage account to use. Il costruttore accetta il nome di un'impostazione dell'app che contiene una stringa di connessione di archiviazione.The constructor takes the name of an app setting that contains a storage connection string. L'attributo può essere applicato a livello di parametro, metodo o classe.The attribute can be applied at the parameter, method, or class level. L'esempio seguente illustra il livello classe e il livello metodo:The following example shows class level and method level:

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

L'account di archiviazione da usare è determinato nell'ordine seguente:The storage account to use is determined in the following order:

  • La proprietà Connection dell'attributo BlobTrigger.The BlobTrigger attribute's Connection property.
  • L'attributo StorageAccount applicato allo stesso parametro dell'attributo BlobTrigger.The StorageAccount attribute applied to the same parameter as the BlobTrigger attribute.
  • L'attributo StorageAccount applicato alla funzione.The StorageAccount attribute applied to the function.
  • L'attributo StorageAccount applicato alla classe.The StorageAccount attribute applied to the class.
  • L'account di archiviazione predefinito per l'app per le funzioni (impostazione dell'app "AzureWebJobsStorage").The default storage account for the function app ("AzureWebJobsStorage" app setting).

Trigger - configurazioneTrigger - configuration

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json e nell'attributo BlobTrigger.The following table explains the binding configuration properties that you set in the function.json file and the BlobTrigger attribute.

Proprietà di function.jsonfunction.json property Proprietà dell'attributoAttribute property DESCRIZIONEDescription
typetype n/dn/a Il valore deve essere impostato su blobTrigger.Must be set to blobTrigger. Questa proprietà viene impostata automaticamente quando si crea il trigger nel portale di Azure.This property is set automatically when you create the trigger in the Azure portal.
directiondirection n/dn/a Il valore deve essere impostato su in.Must be set to in. Questa proprietà viene impostata automaticamente quando si crea il trigger nel portale di Azure.This property is set automatically when you create the trigger in the Azure portal. Le eccezioni sono indicate nella sezione usage.Exceptions are noted in the usage section.
nomename n/dn/a Nome della variabile che rappresenta il BLOB nel codice della funzione.The name of the variable that represents the blob in function code.
pathpath BlobPathBlobPath Contenitore da monitorare.The container to monitor. Può essere un modello di nome per il BLOB.May be a blob name pattern.
connessioneconnection ConnectionConnection Nome di un'impostazione dell'app che contiene la stringa di connessione di archiviazione da usare per questa associazione.The name of an app setting that contains the Storage connection string to use for this binding. Se il nome dell'impostazione dell'app inizia con "AzureWebJobs", è possibile specificare solo il resto del nome.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Ad esempio, se si imposta connection su "MyStorage", il runtime di Funzioni di Azure cerca un'impostazione dell'app denominata "AzureWebJobsMyStorage".For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Se si lascia vuoto connection, il runtime di Funzioni di Azure usa la stringa di connessione di archiviazione predefinita nell'impostazione dell'app denominata AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

La stringa di connessione deve essere relativa a un account di archiviazione di uso generico, non a un account di archiviazione solo BLOB.The connection string must be for a general-purpose storage account, not a blob-only storage account.

Quando si sviluppa in locale, le impostazioni dell'app vengono inserite nel file local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Trigger - usoTrigger - usage

In C# e nello script C# è possibile usare i tipi di parametro seguenti per il BLOB di attivazione:In C# and C# script, you can use the following parameter types for the triggering blob:

  • Stream
  • TextReader
  • string
  • Byte[]
  • Un oggetto POCO serializzabile come JSONA POCO serializable as JSON
  • ICloudBlob1ICloudBlob1
  • CloudBlockBlob1CloudBlockBlob1
  • CloudPageBlob1CloudPageBlob1
  • CloudAppendBlob1CloudAppendBlob1

1 richiede l'associazione "inout" direction in function.json o FileAccess.ReadWrite in una libreria di classi C#.1 Requires "inout" binding direction in function.json or FileAccess.ReadWrite in a C# class library.

Se si prova a eseguire l'associazione a uno dei tipi di Storage SDK e si riceve un messaggio di errore, assicurarsi di fare riferimento alla versione corretta di Storage SDK.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.

L'associazione a string, Byte[] o POCO è consigliabile solo se le dimensioni del BLOB sono ridotte, in quanto l'intero contenuto del BLOB viene caricato in memoria.Binding to string, Byte[], or POCO is only recommended if the blob size is small, as the entire blob contents are loaded into memory. In genere, è preferibile usare un tipo Stream o CloudBlockBlob.Generally, it is preferable to use a Stream or CloudBlockBlob type. Per altre informazioni, vedere Concorrenza e utilizzo della memoria più avanti in questo articolo.For more information, see Concurrency and memory usage later in this article.

In JavaScript si accede a dati del BLOB di input usando context.bindings.<name from function.json>.In JavaScript, access the input blob data using context.bindings.<name from function.json>.

Trigger - modelli di nome dei BLOBTrigger - blob name patterns

È possibile specificare un modello di nome di BLOB nella proprietà path in function.json o nel costruttore dell'attributo BlobTrigger.You can specify a blob name pattern in the path property in function.json or in the BlobTrigger attribute constructor. Il modello di nome può essere un'espressione di filtro o di associazione.The name pattern can be a filter or binding expression. Per esempi, vedere le sezioni seguenti.The following sections provide examples.

Ottenere l'estensione e il nome del fileGet file name and extension

L'esempio seguente illustra come associare il nome e l'estensione del file BLOB separatamente:The following example shows how to bind to the blob file name and extension separately:

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

Se il BLOB è denominato original-Blob1.txt, i valori delle variabili blobname e blobextension nel codice della funzione saranno original-Blob1 e 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.

Filtrare in base al nome del BLOBFilter on blob name

L'esempio seguente attiva un trigger solo per i BLOB nel contenitore input che iniziano con la stringa "original-":The following example triggers only on blobs in the input container that start with the string "original-":

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

Se il nome del BLOB è original-Blob1.txt, il valore della variabile name nel codice della funzione sarà Blob1.If the blob name is original-Blob1.txt, the value of the name variable in function code is Blob1.

Filtrare in base al tipo di fileFilter on file type

L'esempio seguente attiva un trigger solo per i file con estensione png:The following example triggers only on .png files:

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

Filtrare in base alle parentesi graffe nei nomi dei fileFilter on curly braces in file names

Per cercare le parentesi graffe nei nomi dei file, raddoppiare le parentesi graffe per eseguirne l'escape.To look for curly braces in file names, escape the braces by using two braces. L'esempio seguente filtra i BLOB che contengono parentesi graffe nel nome:The following example filters for blobs that have curly braces in the name:

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

Se il BLOB è denominato {20140101}-soundfile.mp3, il valore della variabile name nel codice della funzione sarà soundfile.mp3.If the blob is named {20140101}-soundfile.mp3, the name variable value in the function code is soundfile.mp3.

Trigger - metadatiTrigger - metadata

Il trigger del BLOB contiene diverse proprietà di metadati.The blob trigger provides several metadata properties. Queste proprietà possono essere usate come parte delle espressioni di associazione in altre associazioni o come parametri nel codice.These properties can be used as part of binding expressions in other bindings or as parameters in your code. Questi valori hanno la stessa semantica del tipo CloudBlob.These values have the same semantics as the CloudBlob type.

ProprietàProperty typeType DESCRIZIONEDescription
BlobTrigger string Percorso del BLOB trigger.The path to the triggering blob.
Uri System.Uri L'URI del BLOB per la posizione primaria.The blob's URI for the primary location.
Properties BlobPropertiesBlobProperties Le proprietà di sistema del BLOB.The blob's system properties.
Metadata IDictionary<string,string> I metadati definiti dall'utente per il BLOB.The user-defined metadata for the blob.

Ad esempio, gli esempi seguenti di script C# e JavaScript registrano il percorso nel BLOB di attivazione, incluso il contenitore: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, TraceWriter log)
{
    log.Info($"Full blob path: {blobTrigger}");
} 
module.exports = function (context, myBlob) {
    context.log("Full blob path:", context.bindingData.blobTrigger);
    context.done();
};

Trigger - conferme di BLOBTrigger - blob receipts

Il runtime di Funzioni di Azure verifica che nessuna funzione trigger di BLOB venga chiamata più volte per lo stesso BLOB nuovo o aggiornato.The Azure Functions runtime ensures that no blob trigger function gets called more than once for the same new or updated blob. Gestisce conferme di BLOB per determinare se una versione di BLOB specifica è stata elaborata.To determine if a given blob version has been processed, it maintains blob receipts.

Funzioni di Azure archivia le conferme di BLOB in un contenitore denominato azure-webjobs-hosts nell'account di archiviazione di Azure per l'app per le funzioni, specificato dall'impostazione app AzureWebJobsStorage.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). Una conferma di BLOB contiene le seguenti informazioni:A blob receipt has the following information:

  • La funzione attivata, ovvero "<nome dell'app per le funzioni>.Functions.<nome della funzione>", ad esempio: "MyFunctionApp.Functions.CopyBlob"The triggered function ("<function app name>.Functions.<function name>", for example: "MyFunctionApp.Functions.CopyBlob")
  • Il nome del contenitoreThe container name
  • Il tipo di BLOB ("BlockBlob" o "PageBlob")The blob type ("BlockBlob" or "PageBlob")
  • Il nome del BLOBThe blob name
  • Il valore ETag (identificatore di versione del BLOB, ad esempio: "0x8D1DC6E70A277EF")The ETag (a blob version identifier, for example: "0x8D1DC6E70A277EF")

Per forzare la rielaborazione di un BLOB è possibile eliminare manualmente la conferma del BLOB dal contenitore azure-webjobs-hosts.To force reprocessing of a blob, delete the blob receipt for that blob from the azure-webjobs-hosts container manually.

Trigger - BLOB non elaborabiliTrigger - poison blobs

Se una funzione di trigger del BLOB ha esito negativo per un determinato BLOB, per impostazione predefinita Funzioni di Azure ritenta l'esecuzione fino a 5 volte.When a blob trigger function fails for a given blob, Azure Functions retries that function a total of 5 times by default.

Se tutti i 5 tentativi non riescono, Funzioni di Azure aggiunge un messaggio a una coda di archiviazione denominata webjobs-blobtrigger-poison.If all 5 tries fail, Azure Functions adds a message to a Storage queue named webjobs-blobtrigger-poison. Il messaggio di coda per i BLOB non elaborabili è un oggetto JSON che contiene le seguenti proprietà:The queue message for poison blobs is a JSON object that contains the following properties:

  • FunctionId (nel formato <nome dell'app per le funzioni>.Functions.<nome della funzione>)FunctionId (in the format <function app name>.Functions.<function name>)
  • BlobType ("BlockBlob" o "PageBlob")BlobType ("BlockBlob" or "PageBlob")
  • ContainerNameContainerName
  • BlobNameBlobName
  • ETag (identificatore di versione del BLOB, ad esempio: "0x8D1DC6E70A277EF")ETag (a blob version identifier, for example: "0x8D1DC6E70A277EF")

Trigger: concorrenza e utilizzo della memoriaTrigger - concurrency and memory usage

Il trigger del BLOB usa una un servizio di accodamento interno, quindi il numero massimo di chiamate di funzione simultanee è controllato dalla configurazione delle code in host.json.The blob trigger uses a queue internally, so the maximum number of concurrent function invocations is controlled by the queues configuration in host.json. Le impostazioni predefinite limitano la concorrenza a 24 chiamate.The default settings limit concurrency to 24 invocations. Questo limite si applica separatamente a ciascuna funzione che usa un trigger di BLOB.This limit applies separately to each function that uses a blob trigger.

Il piano di consumo limita un'app per le funzioni in una macchina virtuale (VM) a 1,5 GB di memoria.The consumption plan limits a function app on one virtual machine (VM) to 1.5 GB of memory. La memoria viene usata da ogni istanza della funzione attualmente in esecuzione e dal runtime di funzioni stesso.Memory is used by each concurrently executing function instance and by the Functions runtime itself. Se una funzione di attivazione del BLOB carica l'intero BLOB nella memoria, la memoria massima usata da tale funzione solo per i BLOB è pari a 24 * le dimensioni massime del BLOB.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. Ad esempio, un'app per le funzioni con tre funzioni attivate dal BLOB e le impostazioni predefinite avrebbe una concorrenza per macchina virtuale massima pari a 3 * 24 = 72 chiamate di funzione.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.

Le funzioni JavaScript caricano nella memoria l'intero BLOB e le funzioni C# eseguono questa operazione se si esegue l'associazione a string, Byte[] o POCO.JavaScript functions load the entire blob into memory, and C# functions do that if you bind to string, Byte[], or POCO.

Trigger - pollingTrigger - polling

Se il contenitore BLOB monitorato contiene più di 10.000 BLOB, il runtime di Funzioni analizza i file di log per cercare i BLOB nuovi o modificati.If the blob container being monitored contains more than 10,000 blobs, the Functions runtime scans log files to watch for new or changed blobs. Questo processo può causare ritardi.This process can result in delays. È possibile quindi che una funzione non venga attivata per diversi minuti o più dopo la creazione del BLOB.A function might not get triggered until several minutes or longer after the blob is created. Per di più i log di archiviazione vengono creati in base al principio del "massimo sforzo".In addition, storage logs are created on a "best effort" basis. Non è garantito che tutti gli eventi vengano acquisiti.There's no guarantee that all events are captured. In alcune condizioni, l'acquisizione dei log può non riuscire.Under some conditions, logs may be missed. Se è necessaria un'elaborazione dei BLOB più veloce o affidabile, valutare la possibilità di creare un messaggio della coda quando si crea il BLOB.If you require faster or more reliable blob processing, consider creating a queue message when you create the blob. Usare quindi un trigger di coda invece di un trigger di BLOB per elaborare il BLOB.Then use a queue trigger instead of a blob trigger to process the blob. Un'altra opzione consiste nell'usare Griglia di eventi. Vedere l'esercitazione Automatizzare il ridimensionamento delle immagini caricate con Griglia di eventi.Another option is to use Event Grid; see the tutorial Automate resizing uploaded images using Event Grid.

InputInput

Usare un'associazione di input dell'archiviazione BLOB per leggere i BLOB.Use a Blob storage input binding to read blobs.

Input - esempioInput - example

Vedere l'esempio specifico per ciascun linguaggio:See the language-specific example:

Input - esempio in C#Input - C# example

L'esempio seguente è una funzione in C# che usa un trigger della coda e un'associazione di input BLOB.The following example is a C# function that uses a queue trigger and an input blob binding. Il messaggio della coda contiene il nome del BLOB e la funzione registra la dimensione del BLOB.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,
    TraceWriter log)
{
    log.Info($"BlobInput processed blob\n Name:{myQueueItem} \n Size: {myBlob.Length} bytes");
}

Input - esempio di script C#Input - C# script example

L'esempio seguente mostra associazioni di input e di output di BLOB in un file function.json e codice script C# (.csx) che usa le associazioni.The following example shows blob input and output bindings in a function.json file and C# script (.csx) code that uses the bindings. La funzione crea una copia di un BLOB di testo.The function makes a copy of a text blob. La funzione viene attivata da un messaggio della coda che contiene il nome del BLOB da copiare.The function is triggered by a queue message that contains the name of the blob to copy. Il nuovo BLOB è denominato {originalblobname}-Copy.The new blob is named {originalblobname}-Copy.

Nel file function.json viene usata la proprietà dei metadati queueTrigger per specificare il nome del BLOB nelle proprietà path: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
}

Queste proprietà sono descritte nella sezione configuration.The configuration section explains these properties.

Ecco il codice script C#:Here's the C# script code:

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

Input - esempio JavaScriptInput - JavaScript example

L'esempio seguente mostra associazioni di input e di output di BLOB in un file function.json e codice JavaScript che usa le associazioni.The following example shows blob input and output bindings in a function.json file and JavaScript code that uses the bindings. La funzione crea una copia di un BLOB.The function makes a copy of a blob. La funzione viene attivata da un messaggio della coda che contiene il nome del BLOB da copiare.The function is triggered by a queue message that contains the name of the blob to copy. Il nuovo BLOB è denominato {originalblobname}-Copy.The new blob is named {originalblobname}-Copy.

Nel file function.json viene usata la proprietà dei metadati queueTrigger per specificare il nome del BLOB nelle proprietà path: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
}

Queste proprietà sono descritte nella sezione configuration.The configuration section explains these properties.

Ecco il codice JavaScript: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();
};

Input - attributiInput - attributes

Nelle librerie di classi C# usare BlobAttribute.In C# class libraries, use the BlobAttribute.

Il costruttore dell'attributo accetta il percorso del BLOB e un parametro FileAccess che indica la lettura o la scrittura, come illustrato nell'esempio seguente: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,
    TraceWriter log)
{
    log.Info($"BlobInput processed blob\n Name:{myQueueItem} \n Size: {myBlob.Length} bytes");
}

È possibile impostare la proprietà Connection per specificare l'account di archiviazione da usare, come illustrato nell'esempio seguente: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,
    TraceWriter log)
{
    log.Info($"BlobInput processed blob\n Name:{myQueueItem} \n Size: {myBlob.Length} bytes");
}

È possibile usare l'attributo StorageAccount per specificare l'account di archiviazione a livello di classe, metodo o parametro.You can use the StorageAccount attribute to specify the storage account at class, method, or parameter level. Per altre informazioni, vedere Trigger - attributi.For more information, see Trigger - attributes.

Input - configurazioneInput - configuration

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json e nell'attributo Blob.The following table explains the binding configuration properties that you set in the function.json file and the Blob attribute.

Proprietà di function.jsonfunction.json property Proprietà dell'attributoAttribute property DESCRIZIONEDescription
typetype n/dn/a Il valore deve essere impostato su blob.Must be set to blob.
directiondirection n/dn/a Il valore deve essere impostato su in.Must be set to in. Le eccezioni sono indicate nella sezione usage.Exceptions are noted in the usage section.
nomename n/dn/a Nome della variabile che rappresenta il BLOB nel codice della funzione.The name of the variable that represents the blob in function code.
pathpath BlobPathBlobPath Percorso del BLOB.The path to the blob.
connessioneconnection ConnectionConnection Nome di un'impostazione dell'app che contiene la stringa di connessione di archiviazione da usare per questa associazione.The name of an app setting that contains the Storage connection string to use for this binding. Se il nome dell'impostazione dell'app inizia con "AzureWebJobs", è possibile specificare solo il resto del nome.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Ad esempio, se si imposta connection su "MyStorage", il runtime di Funzioni di Azure cerca un'impostazione dell'app denominata "AzureWebJobsMyStorage".For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Se si lascia vuoto connection, il runtime di Funzioni di Azure usa la stringa di connessione di archiviazione predefinita nell'impostazione dell'app denominata AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

La stringa di connessione deve essere relativa a un account di archiviazione di uso generico, non a un account di archiviazione solo BLOB.The connection string must be for a general-purpose storage account, not a blob-only storage account.
n/dn/a AccedereAccess Indica se eseguire la lettura o la scrittura.Indicates whether you will be reading or writing.

Quando si sviluppa in locale, le impostazioni dell'app vengono inserite nel file local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Input - usoInput - usage

In C# e nello script C# è possibile usare i tipi di parametro seguenti per l'associazione di input BLOB: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 richiede l'associazione "inout" direction in function.json o FileAccess.ReadWrite in una libreria di classi C#.1 Requires "inout" binding direction in function.json or FileAccess.ReadWrite in a C# class library.

Se si prova a eseguire l'associazione a uno dei tipi di Storage SDK e si riceve un messaggio di errore, assicurarsi di fare riferimento alla versione corretta di Storage SDK.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.

L'associazione a string o Byte[] è consigliabile solo se le dimensioni del BLOB sono ridotte, in quanto l'intero contenuto del BLOB viene caricato in memoria.Binding to string or Byte[] is only recommended if the blob size is small, as the entire blob contents are loaded into memory. In genere, è preferibile usare un tipo Stream o CloudBlockBlob.Generally, it is preferable to use a Stream or CloudBlockBlob type. Per altre informazioni, vedere Concorrenza e utilizzo della memoria più indietro in questo articolo.For more information, see Concurrency and memory usage earlier in this article.

In JavaScript si accede a dati del BLOB di input usando context.bindings.<name from function.json>.In JavaScript, access the blob data using context.bindings.<name from function.json>.

OutputOutput

Usare associazioni di output di archiviazione BLOB per scrivere i BLOB.Use Blob storage output bindings to write blobs.

Output - esempioOutput - example

Vedere l'esempio specifico per ciascun linguaggio:See the language-specific example:

Output - esempio in C#Output - C# example

L'esempio seguente è una funzione in C# che usa un trigger di BLOB di input e due associazioni di BLOB di output.The following example is a C# function that uses a blob trigger and two output blob bindings. La funzione viene attivata dalla creazione di un BLOB dell'immagine nel contenitore sample-images.The function is triggered by the creation of an image blob in the sample-images container. Crea copie di piccole e medie dimensioni del BLOB dell'immagine.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) }
};

Output - esempio di script C#Output - C# script example

L'esempio seguente mostra associazioni di input e di output di BLOB in un file function.json e codice script C# (.csx) che usa le associazioni.The following example shows blob input and output bindings in a function.json file and C# script (.csx) code that uses the bindings. La funzione crea una copia di un BLOB di testo.The function makes a copy of a text blob. La funzione viene attivata da un messaggio della coda che contiene il nome del BLOB da copiare.The function is triggered by a queue message that contains the name of the blob to copy. Il nuovo BLOB è denominato {originalblobname}-Copy.The new blob is named {originalblobname}-Copy.

Nel file function.json viene usata la proprietà dei metadati queueTrigger per specificare il nome del BLOB nelle proprietà path: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
}

Queste proprietà sono descritte nella sezione configuration.The configuration section explains these properties.

Ecco il codice script C#:Here's the C# script code:

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

Output - esempio JavaScriptOutput - JavaScript example

L'esempio seguente mostra associazioni di input e di output di BLOB in un file function.json e codice JavaScript che usa le associazioni.The following example shows blob input and output bindings in a function.json file and JavaScript code that uses the bindings. La funzione crea una copia di un BLOB.The function makes a copy of a blob. La funzione viene attivata da un messaggio della coda che contiene il nome del BLOB da copiare.The function is triggered by a queue message that contains the name of the blob to copy. Il nuovo BLOB è denominato {originalblobname}-Copy.The new blob is named {originalblobname}-Copy.

Nel file function.json viene usata la proprietà dei metadati queueTrigger per specificare il nome del BLOB nelle proprietà path: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
}

Queste proprietà sono descritte nella sezione configuration.The configuration section explains these properties.

Ecco il codice JavaScript: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();
};

Output - attributiOutput - attributes

Nelle librerie di classi C# usare BlobAttribute.In C# class libraries, use the BlobAttribute.

Il costruttore dell'attributo accetta il percorso del BLOB e un parametro FileAccess che indica la lettura o la scrittura, come illustrato nell'esempio seguente: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)
{
    ...
}

È possibile impostare la proprietà Connection per specificare l'account di archiviazione da usare, come illustrato nell'esempio seguente: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)
{
    ...
}

Per un esempio completo, vedere Output - esempio in C#.For a complete example, see Output - C# example.

È possibile usare l'attributo StorageAccount per specificare l'account di archiviazione a livello di classe, metodo o parametro.You can use the StorageAccount attribute to specify the storage account at class, method, or parameter level. Per altre informazioni, vedere Trigger - attributi.For more information, see Trigger - attributes.

Output - configurazioneOutput - configuration

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json e nell'attributo Blob.The following table explains the binding configuration properties that you set in the function.json file and the Blob attribute.

Proprietà di function.jsonfunction.json property Proprietà dell'attributoAttribute property DESCRIZIONEDescription
typetype n/dn/a Il valore deve essere impostato su blob.Must be set to blob.
directiondirection n/dn/a Deve essere impostato su out per un'associazione di output.Must be set to out for an output binding. Le eccezioni sono indicate nella sezione usage.Exceptions are noted in the usage section.
nomename n/dn/a Nome della variabile che rappresenta il BLOB nel codice della funzione.The name of the variable that represents the blob in function code. Impostare su $return per fare riferimento al valore restituito della funzione.Set to $return to reference the function return value.
pathpath BlobPathBlobPath Percorso del BLOB.The path to the blob.
connessioneconnection ConnectionConnection Nome di un'impostazione dell'app che contiene la stringa di connessione di archiviazione da usare per questa associazione.The name of an app setting that contains the Storage connection string to use for this binding. Se il nome dell'impostazione dell'app inizia con "AzureWebJobs", è possibile specificare solo il resto del nome.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Ad esempio, se si imposta connection su "MyStorage", il runtime di Funzioni di Azure cerca un'impostazione dell'app denominata "AzureWebJobsMyStorage".For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Se si lascia vuoto connection, il runtime di Funzioni di Azure usa la stringa di connessione di archiviazione predefinita nell'impostazione dell'app denominata AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

La stringa di connessione deve essere relativa a un account di archiviazione di uso generico, non a un account di archiviazione solo BLOB.The connection string must be for a general-purpose storage account, not a blob-only storage account.
n/dn/a AccedereAccess Indica se eseguire la lettura o la scrittura.Indicates whether you will be reading or writing.

Quando si sviluppa in locale, le impostazioni dell'app vengono inserite nel file local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Output - usoOutput - usage

In C# e negli script C#, è possibile eseguire l'associazione ai seguenti tipi per la scrittura dei BLOB: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 richiede l'associazione "in" direction in function.json o FileAccess.Read in una libreria di classi C#.1 Requires "in" binding direction in function.json or FileAccess.Read in a C# class library. Tuttavia, è possibile usare l'oggetto contenitore che il runtime fornisce per scrivere operazioni, come ad esempio il caricamento di BLOB nel contenitore.However, you can use the container object that the runtime provides to do write operations, such as uploading blobs to the container.

2 richiede l'associazione "inout" direction in function.json o FileAccess.ReadWrite in una libreria di classi C#.2 Requires "inout" binding direction in function.json or FileAccess.ReadWrite in a C# class library.

Se si prova a eseguire l'associazione a uno dei tipi di Storage SDK e si riceve un messaggio di errore, assicurarsi di fare riferimento alla versione corretta di Storage SDK.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.

Nelle funzioni asincrone usare il valore restituito o IAsyncCollector anziché un parametro out.In async functions, use the return value or IAsyncCollector instead of an out parameter.

L'associazione a string o Byte[] è consigliabile solo se le dimensioni del BLOB sono ridotte, in quanto l'intero contenuto del BLOB viene caricato in memoria.Binding to string or Byte[] is only recommended if the blob size is small, as the entire blob contents are loaded into memory. In genere, è preferibile usare un tipo Stream o CloudBlockBlob.Generally, it is preferable to use a Stream or CloudBlockBlob type. Per altre informazioni, vedere Concorrenza e utilizzo della memoria più indietro in questo articolo.For more information, see Concurrency and memory usage earlier in this article.

In JavaScript si accede a dati del BLOB di input usando context.bindings.<name from function.json>.In JavaScript, access the blob data using context.bindings.<name from function.json>.

Eccezioni e codici restituitiExceptions and return codes

AssociazioneBinding RiferimentiReference
BLOBBlob Codici di errore BLOBBlob Error Codes
Blob, Table, QueueBlob, Table, Queue Codici di errore di archiviazioneStorage Error Codes
Blob, Table, QueueBlob, Table, Queue Risoluzione dei problemiTroubleshooting

Passaggi successiviNext steps