将文件上传到 Azure 存储的 POST 方法 - 返回啥
Posted
技术标签:
【中文标题】将文件上传到 Azure 存储的 POST 方法 - 返回啥【英文标题】:POST method to upload file to Azure storage - what to return将文件上传到 Azure 存储的 POST 方法 - 返回什么 【发布时间】:2020-07-10 23:56:36 【问题描述】:我正在创建一个应用程序,其中
-
用户可以上传文本文件,然后
找到最常用的词并在文本中更改该词并
向用户显示更改后的文本。
如果可以的话,我愿意
-
在调用 Post 方法时在上传前获取文件的文本内容并保存该内容
所以我在 POST 方法中添加了“DownloadTextAsync()”方法,但似乎我将此方法调用到了错误的主题?
[HttpPost("UploadText")]
public async Task<IActionResult> Post(List<IFormFile> files)
string connectionString = Environment.GetEnvironmentVariable("mykeystringhere");
// Create a BlobServiceClient object which will be used to create a container client
BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
//Create a unique name for the container
string containerName = "textdata" + Guid.NewGuid().ToString();
// Create the container and return a container client object
BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync(containerName);
// Create a local file in the ./data/ directory for uploading and downloading
string localPath = "./data/";
string fileName = "textfiledata" + Guid.NewGuid().ToString() + ".txt";
string localFilePath = Path.Combine(localPath, fileName);
// Get a reference to a blob
BlobClient blobClient = containerClient.GetBlobClient(fileName);
// Open the file and upload its data
using FileStream uploadFileStream = System.IO.File.OpenRead(localFilePath);
await blobClient.UploadAsync(uploadFileStream, true);
uploadFileStream.Close();
string downloadFilePath = localFilePath.Replace(".txt", "DOWNLOAD.txt");
// Get the blob file as text
string contents = blobClient.DownloadTextAsync().Result;
//return the string
return contents;
//if (uploadSuccess)
// return View("UploadSuccess");
//else
// return View("UploadError");
我遇到的问题是
我知道“blobClient”是对 blob 的引用,我可以在其中获取文件的数据,但这一定是错误的?
另外,我似乎不能使用“CloudBlobContainer”或“CloudBlockBlob blob”。是不是因为在POST方法里面,blob刚刚初始化,执行这两个的时候不存在?
另外,当我测试 POST 方法时,控制台会抛出“拒绝加载字体”,因为它违反了以下内容安全策略指令:“default-src 'none'”。请注意,'font-src' 没有明确设置,所以 'default-src' 被用作后备。”我用谷歌搜索但不知道这是什么意思? 我尝试了不同的方法,但一直无法发布/“但无法真正找到可靠的答案。这可能与我的 POST 方法有关吗?
【问题讨论】:
【参考方案1】:我知道“blobClient”是对 blob 的引用,我在这里 可以获取文件的数据,但这一定是错误的?
从某种意义上说是正确的,您可以使用blobClient
对blob 执行上传/下载等操作。我不知道您为什么说but this must be wrong
。
另外,我似乎不能使用“CloudBlobContainer”,也不能使用 “CloudBlockBlob 斑点”。是不是因为在 POST 方法内部, blob 刚刚初始化,当这两个是不存在的时候 执行了吗?
不,发生这种情况是因为您使用的是较新版本的 SDK (version 12.x.x)
和 CloudBlobContainer
和 CloudBlockBlob
在较旧版本的 SDK 中可用。
另外,当我测试 POST 方法时,控制台会抛出“拒绝加载 字体 '' 因为它违反了以下内容安全政策 指令:“default-src 'none'”。请注意,'font-src' 不是 显式设置,因此 'default-src' 用作后备。”我 谷歌搜索但不知道这是什么意思?我尝试了不同的方法 但不断收到 CANNOT POST/“ 但无法真正找到实体 回答。这可能与我的 POST 方法有关吗?
不知道为什么会这样。您可能想为此提出一个单独的问题,当您这样做时,请同时包含代码的 html 部分。
【讨论】:
非常感谢您的回答!关于第一个答案,我尝试使用 ``` string contents = blobClient.DownloadTextAsync().Result;在 post 操作结束时返回内容 ```,但 VS 显示错误说“'BlobClient' 没有继续定义 'DownloadTextAync' 并且没有可访问的扩展方法 'DownloadTextAync' 接受类型为 'BlobClient' 的第一个参数可以找到(您是否缺少 using 指令或程序集引用?)”我想知道在哪里可以使用 DownloadTextAsync 方法以及返回什么? 您收到此错误的原因是因为您使用的是较新版本的 SDK,并且它没有DownloadTextAsync
方法。您可以做的一件事是在blobClient
上调用Download
方法,该方法将返回BlobDownloadInfo
类型的对象。它是Content
属性的类型为Stream
。您可以读取该流,转换为字符串,然后返回该字符串。以上是关于将文件上传到 Azure 存储的 POST 方法 - 返回啥的主要内容,如果未能解决你的问题,请参考以下文章
使用 Node 和 graphql 将文件流式上传到 Azure Blob 存储
将文件从 Azure 存储 blob 移动到 Ftp 服务器