【问题标题】:Getting file type in Blob Storage bound Azure Function在 Blob 存储绑定的 Azure 函数中获取文件类型
【发布时间】:2021-02-03 20:19:47
【问题描述】:

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

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

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

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

这是标准的BlogTrigger Azure 函数代码:

[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");
}

【问题讨论】:

  • 我认为你需要使用CloudBlockBlob来接收blob,然后你可以得到你的blob的mimetype。对于blob的流,可以通过DownloadToStreamAsync方法下载。请看我的回答。

标签: azure-functions azure-blob-storage azure-blob-trigger


【解决方案1】:

你可以获得这些属性。

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

[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");
}

【讨论】:

  • 你拯救了我的一天!谢谢!
【解决方案2】:

不,请使用 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2018-08-12
    • 2023-01-16
    • 2021-02-03
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多