首页 > 解决方案 > 如何使用带有 HTTP 触发器的 Azure Functions 在 Azure Blob 存储中上传 excel 文件?

问题描述

我正在尝试使用 Azure 函数(HTTP 触发器)在 azure blob 存储中上传 excel 文件。我附上了我的代码。它无法正常工作。

我收到类似的错误"Cannot implicitly convert type 'System.Threading.Tasks.Task<System.Collections.Generic.List<FileUpload1.Function1.FileDetails>>' to 'FileUpload1.Function1.FileDetails' FileUpload"

请帮我解决这个问题。

    [FunctionName("Function1")]
    public static FileDetails  Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req,
        ILogger log)
    {
        if (!req.Content.IsMimeMultipartContent("form-data"))
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }
        var multipartStreamProvider = new AzureBlobStorageMultipartProvider(BlobHelper.GetWebApiContainer());
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse("configuratorstorage1");
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer container = blobClient.GetContainerReference("excelfiles");
        //var count = container.ListBlobs().Count(); return
        return req.Content.ReadAsMultipartAsync(multipartStreamProvider).ContinueWith(t =>
        {
            if (t.IsFaulted)
            {
                throw t.Exception;
            }
            AzureBlobStorageMultipartProvider provider = t.Result;
            return provider.Files;
        });

我期望我必须使用 azure 函数 HTTP 触发器在 azure blob 存储中上传 excel 文件。

标签: c#azureazure-functionsazure-cosmosdbazure-blob-storage

解决方案


目前,req.Content.ReadAsMultipartAsync(multipartStreamProvider).ContinueWith(t => ...正在回归Task<FileDetails>。您需要await它来获取要返回的对象public static FileDetails Run()

return await req.Content.ReadAsMultipartAsync(multipartStreamProvider).ContinueWith(t =>
{
    if (t.IsFaulted)
    {
        throw t.Exception;
    }
    AzureBlobStorageMultipartProvider provider = t.Result;
    return provider.Files;
});

编辑:在快速谷歌之后 -req.Content.ReadAsMultipartAsync(multipartStreamProvider).ContinueWith(t => ...可能会返回Task<List<FileDetails>>,所以如果上述方法不起作用,请尝试。


推荐阅读