1

我正在创建一个绑定到我的 Azure Blob 存储容器并在上传文件时触发的 Azure 函数。

这个特定的容器可以包含任何类型的文件/blob,例如图像、PDF、Excel、MP4 等。

我想创建不同的处理程序,这些处理程序将根据上传的文件类型执行某些操作。例如,如果它是一个图像文件,我想获取它的尺寸。如果是 MP4,我想调用另一个服务来处理视频等。

如何从中获取文件类型Stream?重要的是要注意我不能依赖文件扩展名,因为在某些情况下,扩展名可能不存在。有没有办法让我得到mimetype

这是标准的BlogTriggerAzure 函数代码:

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

2 回答 2

1

您可以获得这些属性。

Content-Type(如果在上传时设置)在参数中返回metaData

[FunctionName("SomeFunction")]
public async Task RunFunctionFaceDetection(
    [BlobTrigger("%PhotosContainerName%/{blobname}.{blobextension}", Connection = "storage-conn")]Stream inputBlob,
    string blobName, //blob name
    string blobExtension, //blob extension - file extension
    string blobTrigger, // full path to triggering blob
    Uri uri, // blob primary location
    IDictionary<string, string> metaData) // user-defined blob metadata
{
    _logger.LogInformation($"RunFunctionAWSFaceDetection just started...");
    _logger.LogInformation($@"
            blobName      {blobName}
            blobExtension {blobExtension}
            blobTrigger   {blobTrigger}
            uri           {uri}
            metaData      {metaData.Count}");

    _logger.LogInformation($"C# Blob trigger function processed blob\n Name:{blobName} \n Size: {inputBlob.Length} Bytes");
}
于 2020-10-20T23:56:00.570 回答
1

不,请使用 CloudBlockBlob 接收 blob:

using System;
using System.IO;
using System.Text;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Blob;

namespace FunctionApp24
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([BlobTrigger("test/{name}", Connection = "str")] CloudBlockBlob myBlob, string name, ILogger log)
        {
            string a = myBlob.Properties.ContentType;
            log.LogInformation(a);
        }
    }
}

您可以使用以下代码将 blob 转换为流:

Stream stream = new MemoryStream();
myBlob.DownloadToStreamAsync(stream).Wait();
于 2020-10-21T03:03:07.957 回答