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.

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

Gli account di archiviazione solo BLOB non sono supportati.Blob-only storage accounts are not supported. I trigger e le associazioni di archiviazione BLOB richiedono un account di archiviazione generico.Blob storage triggers and bindings require a general-purpose storage account.

TriggerTrigger

Usare un trigger di archiviazione BLOB per l'avvio di una funzione quando viene rilevato un BLOB nuovo o aggiornato.Use a Blob storage trigger to start 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.

Nota

Quando si usa un trigger di tipo BLOB in un 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.When you're using a blob trigger on a Consumption plan, there can be up to a 10-minute delay in processing new blobs after a function app has gone idle. Quando l'app per le funzioni è in esecuzione, i BLOB vengono elaborati immediatamente.After the function app is running, blobs are processed immediately. Per evitare questo ritardo iniziale, prendere in considerazione una delle opzioni seguenti:To avoid this initial delay, consider one of the following options:

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 codice C# precompilato che scrive un log quando viene aggiunto o aggiornato un BLOB nel contenitore samples-workitems.The following example shows precompiled C# code 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");
}

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# che usa l'associazione.The following example shows a blob trigger binding in a function.json file and C# script 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",
            "connection":"MyStorageAccountAppSetting"
        }
    ]
}

Queste proprietà sono descritte nella sezione configuration.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 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",
            "connection":"MyStorageAccountAppSetting"
        }
    ]
}

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 Blob trigger function processed', context.bindings.myBlob);
    context.done();
};

Trigger - attributiTrigger - attributes

Per le funzioni di C# precompilato, usare i seguenti attributi per configurare un trigger di BLOB:For precompiled C# functions, use the following attributes to configure a blob trigger:

  • BlobTriggerAttribute, definito nel pacchetto NuGet Microsoft.Azure.WebJobsBlobTriggerAttribute, defined in NuGet package Microsoft.Azure.WebJobs

    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# precompilato.For a complete example, see Trigger - precompiled C# example.

  • StorageAccountAttribute, definito nel pacchetto NuGet Microsoft.Azure.WebJobsStorageAccountAttribute, defined in NuGet package Microsoft.Azure.WebJobs

    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 negli script C# è possibile accedere ai dati del BLOB con un parametro del metodo, ad esempio Stream paramName.In C# and C# script, access the blob data by using a method parameter such as Stream paramName. Negli script C#, paramName è il valore specificato nella proprietà name di function.json.In C# script, paramName is the value specified in the name property of function.json. È possibile definire associazioni con uno dei seguenti tipi:You can bind to any of the following types:

  • TextReader
  • Stream
  • ICloudBlob (è necessaria la direzione di associazione "inout" in function.json)ICloudBlob (requires "inout" binding direction in function.json)
  • CloudBlockBlob (è necessaria la direzione di associazione "inout" in function.json)CloudBlockBlob (requires "inout" binding direction in function.json)
  • CloudPageBlob (è necessaria la direzione di associazione "inout" in function.json)CloudPageBlob (requires "inout" binding direction in function.json)
  • CloudAppendBlob (è necessaria la direzione di associazione "inout" in function.json)CloudAppendBlob (requires "inout" binding direction in function.json)

Come accennato, alcuni di questi tipi richiedono una direzione di associazione inout in function.json.As noted, some of these types require an inout binding direction in function.json. Questa direzione non è supportata dall'editor standard nel portale di Azure, pertanto è necessario usare l'editor avanzato.This direction is not supported by the standard editor in the Azure portal, so you must use the advanced editor.

Se sono previsti BLOB di testo, è possibile eseguire l'associazione al tipo string.If text blobs are expected, you can bind to the string type. È consigliabile solo se le dimensioni del BLOB sono ridotte, in quanto l'intero contenuto del BLOB viene caricato in memoria.This 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.

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

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.

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.

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 value of the blobname and blobextension variables in function code are original-Blob1 and txt.

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 TipoType 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.

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 - polling per i contenitori di grandi dimensioniTrigger - polling for large containers

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.

Input e outputInput & output

Usare le associazioni di input e di output per l'archiviazione BLOB per la lettura e la scrittura dei BLOB.Use Blob storage input and output bindings to read and write blobs.

Input e output - esempioInput & output - example

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

Input e output - esempio in C#Input & output - C# example

L'esempio seguente è una funzione in C# precompilato che usa un trigger di BLOB di input e due associazioni di BLOB di output.The following example is a precompiled 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) }
};

Input e output - esempio di script C#Input & 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# che usa le associazioni.The following example shows blob input and output bindings in a function.json file and C# script 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 e output - esempio JavaScriptInput & output - 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 e output - attributiInput & output - attributes

Per C# precompilato usare BlobAttribute, che è definito nel pacchetto NuGet Microsoft.Azure.WebJobs.For precompiled C# functions, use the BlobAttribute, which is defined in NuGet package Microsoft.Azure.WebJobs.

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 Input e output - esempio in C# precompilato.For a complete example, see Input & output - precompiled 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.

Input e output - configurazioneInput & output - 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 in per un'associazione di input o su out per un'associazione di output.Must be set to in for an input binding or 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.

Input e output - usoInput & output - usage

In C# precompilato e negli script C# è possibile accedere al BLOB con un parametro del metodo, ad esempio Stream paramName.In precompiled C# and C# script, access the blob by using a method parameter such as Stream paramName. Negli script C#, paramName è il valore specificato nella proprietà name di function.json.In C# script, paramName is the value specified in the name property of function.json. È possibile definire associazioni con uno dei seguenti tipi:You can bind to any of the following types:

  • out string
  • TextWriter
  • TextReader
  • Stream
  • ICloudBlob (è necessaria la direzione di associazione "inout" in function.json)ICloudBlob (requires "inout" binding direction in function.json)
  • CloudBlockBlob (è necessaria la direzione di associazione "inout" in function.json)CloudBlockBlob (requires "inout" binding direction in function.json)
  • CloudPageBlob (è necessaria la direzione di associazione "inout" in function.json)CloudPageBlob (requires "inout" binding direction in function.json)
  • CloudAppendBlob (è necessaria la direzione di associazione "inout" in function.json)CloudAppendBlob (requires "inout" binding direction in function.json)

Come accennato, alcuni di questi tipi richiedono una direzione di associazione inout in function.json.As noted, some of these types require an inout binding direction in function.json. Questa direzione non è supportata dall'editor standard nel portale di Azure, pertanto è necessario usare l'editor avanzato.This direction is not supported by the standard editor in the Azure portal, so you must use the advanced editor.

Se si esegue la lettura di BLOB di testo, è possibile eseguire l'associazione a un tipo string.If you are reading text blobs, you can bind to a string type. È consigliabile usare questo tipo solo se le dimensioni del BLOB sono ridotte, in quanto l'intero contenuto del BLOB viene caricato in memoria.This type 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.

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

Passaggi successiviNext steps