我想将文件上传到 Azure Blob 存储,并将与文件相关的元数据保存到表存储。实现这一目标的最佳方法是什么?Blob 存储 URI 需要保存在表存储模型数据中,因此我首先需要将文件上传到 Blob 存储,然后才能保存元数据。
在一张表格上执行此操作是否是一种好习惯?有没有人有任何他们可以指出我的例子或教程
我想将文件上传到 Azure Blob 存储,并将与文件相关的元数据保存到表存储。实现这一目标的最佳方法是什么?Blob 存储 URI 需要保存在表存储模型数据中,因此我首先需要将文件上传到 Blob 存储,然后才能保存元数据。
在一张表格上执行此操作是否是一种好习惯?有没有人有任何他们可以指出我的例子或教程
首先,它在技术上不可能实现这一点,因为 URI 不同,处理 Azure blob 和表存储的 API 也不同。
不过,您确实有一些选择。首先,blob API 允许将元数据与 blob 相关联。Put Blob REST API 调用具有选项x -ms-meta name:value。这样,您可以执行单个 HTTP 请求来存储 blob 内容和元数据。如果您想将元数据严格存储到表存储中并一次性完成,那么您可以通过您的网络服务器路由您的 HTTP 请求,将内容和元数据发布到服务器端应用程序,然后由服务器端应用程序处理存储到blob 和 table 存储相关内容。
我通过将文件发布到 blob 存储并从同一页面上的表单集合中获取关联的元数据来实现这一点。在我的 POST 中,我使用 IO steam 来读取文件和相关的元数据,如下所示:
[HttpPost]
public ActionResult NewContent(HttpPostedFileBase postedFile,FormCollection form)
{
if (postedFile != null)
{
HttpPostedFileBase postedFileCopy = postedFile;
postedFileCopy.InputStream.Position = 0;
Stream stream = postedFile.InputStream;
string[] name = form.GetValues("name");
string[] author = form.GetValues("author");
string[] description = form.GetValues("description");
DateTime uploaddate = form.GetValues("uploaddate");
DateTime expirydate = form.GetValues("expirydate");
string[] participationpoints = form.GetValues("participationpoints");
string[] contenttypeid = form.GetValues("contenttypeid");
try
{
avm.AddContent(postedFile, stream, name, author, description, uploaddate, expirydate, participationpoints, contenttypeid);
}
catch (Exception ex)
{
return RedirectToAction("Index", "Admin");
}
}
}
然后,在我的 AdminViewModel 中,我调用了一个方法,通过我的 dbcontext 保存了关联的元数据,因此将更改保存到 SQL 存储,同时文件也写入了 blob 存储。