使用Azure Storage SDK尝试写入文件并将其上传到Azure文件共享存储时出错

时间:2019-08-28 21:09:34

标签: azure-functions azure-storage-files

我正在使用POST方法的门户中开发HTTP函数触发器(2.x)。在触发器上进行数据POST时,它将数据存储到文件中并将该文件保存在Azure File Sharing Storage中。为此,我正在使用Azure存储SDK。但是我遇到了以下错误:

  

错误CS1061:“ CloudFile”不包含以下内容的定义:   “ UploadText”,没有扩展方法“ UploadText”接受第一个   可以找到类型为“ CloudFile”的参数(您是否缺少使用   指令还是程序集引用?)

请参考以下代码:

#r "Newtonsoft.Json"
#r "Microsoft.WindowsAzure.Storage"
using System.Net;
using System.Web;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.File;
using System.IO;

 public static async Task<IActionResult> Run(HttpRequest req)
    {
        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

        var storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=xxxxxxxxxxxxxxxxx;AccountKey=xxxxxx==;FileEndpoint=https://xxxxxxxxxxxxxxxxx.file.core.windows.net/;");
        var fileClient = storageAccount.CreateCloudFileClient();
        string baseShareName = "https://xxxxxxxxxxxxxxxxx.file.core.windows.net/xxxxxxxxxxxxxxxxx921d";
        var share = fileClient.GetShareReference(baseShareName);
        var rootDir = share.GetRootDirectoryReference();  
        var sampleDir = rootDir.GetDirectoryReference("WorkingFolder");
        var fileToCreate = sampleDir.GetFileReference("output.txt");

        fileToCreate.UploadText(requestBody);

        return new OkObjectResult("Data has been received");
    }

1 个答案:

答案 0 :(得分:1)

第二次更新:

在此更新中,我将展示有关如何成功将文件更新为天蓝色的整个步骤,

1.fist,您需要构建将文件保存在的位置: file storage enter image description here enter image description here 以上是我文件存储的内部情况。

为您方便理解,我将向您介绍文件存储的结构。 enter image description here

Azure存储帐户: 存储帐户是用于管理Azure存储的名称空间,用于控制对存储数据的访问和计费。通过存储帐户对Azure提供的存储服务(例如Blob,队列,文件和表)进行访问控制,因此要使用文件存储,需要首先创建存储帐户。

共享: 共享是管理共享文件的单元。任何要共享的文件和目录必须属于一个共享。一个存储帐户下的共享数量是无限的,每个共享中可以存储任意数量的文件。但是每个共享最多可以容纳5TB的数据。

目录: 与Blob存储不同,文件存储支持真实的文件目录。您可以根据需要创建目录。

文件: 文件是真正的共享文件,每个文件最大为1TB。

现在,这是我的代码:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.WindowsAzure.Storage;

namespace UploadFileFunction
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {

            var storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=bowmanimagestorage02;AccountKey=xxxxxxxx==;BlobEndpoint=https://bowmanimagestorage02.blob.core.windows.net/;TableEndpoint=https://bowmanimagestorage02.table.core.windows.net/;QueueEndpoint=https://bowmanimagestorage02.queue.core.windows.net/;FileEndpoint=https://bowmanimagestorage02.file.core.windows.net");
            var myClient = storageAccount.CreateCloudFileClient();
            var share = myClient.GetShareReference("testfileshare");
            var rootDir = share.GetRootDirectoryReference();
            var sampleDir = rootDir.GetDirectoryReference("WorkingFolder");
            var fileToCreate = sampleDir.GetFileReference("output.txt");

            await fileToCreate.UploadFromStreamAsync(req.Body);

            return new OkObjectResult("Data has been received");
        }
    }
}

这是我的txt文件:enter image description here

运行该函数并使用post方法发送该函数后,文件成功上传到文件存储中。 enter image description here

也许您想问我为什么我使用UploadFromStreamAsync()而不是UploadText()。实际上,我也尝试了UploadText()并将字符串类型的值传递给它,但是我发现如果您希望程序可重用,则此函数不能很好地解析http消息的所有类型的请求正文。建议您使用UploadFromStreamAsync()。


首次更新:

我想告诉您的另一个问题是使用fileClient.GetShareReference();,您应该使用sharename而不是shareurl。


原始答案:

我尝试了您的代码,我得到了error

您可以使用此:

fileToCreate.UploadTextAsync(requestBody);

然后问题将消失。 no error

我做了与您相似的事情。我当时尝试上传文字,图片和视频。如果仍有问题,可以问我。

相关问题