我正在使用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");
}
答案 0 :(得分:1)
第二次更新:
在此更新中,我将展示有关如何成功将文件更新为天蓝色的整个步骤,
1.fist,您需要构建将文件保存在的位置:
以上是我文件存储的内部情况。
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");
}
}
}
运行该函数并使用post方法发送该函数后,文件成功上传到文件存储中。
也许您想问我为什么我使用UploadFromStreamAsync()而不是UploadText()。实际上,我也尝试了UploadText()并将字符串类型的值传递给它,但是我发现如果您希望程序可重用,则此函数不能很好地解析http消息的所有类型的请求正文。建议您使用UploadFromStreamAsync()。
首次更新:
我想告诉您的另一个问题是使用fileClient.GetShareReference();
,您应该使用sharename而不是shareurl。
原始答案:
我尝试了您的代码,我得到了error。
您可以使用此:
fileToCreate.UploadTextAsync(requestBody);
然后问题将消失。 no error
我做了与您相似的事情。我当时尝试上传文字,图片和视频。如果仍有问题,可以问我。