我想上传一个文件到Azure Blob存储,并将与该文件相关的相关元数据保存到表存储。实现这一目标的最佳方式是什么?blob存储URI需要保存在表存储模型数据中,因此我首先需要将文件上传到blob存储,然后才能保存元数据。
在一张表格上这样做会是一种好的做法吗?有人有任何例子或教程可以为我介绍
首先,实现这一点在技术上是不可能的,因为URI不同,处理Azure Blob和表存储的API也不同。
不过,你确实有一些选择。首先,blob API允许将元数据与blob相关联。Put Blob REST API调用具有选项x-ms-meta-name:value。通过这种方式,您可以执行单个HTTP请求来存储blob内容和元数据。如果你想严格地将元数据存储到表存储中并一次性完成,那么你可以通过你的web服务器路由你的HTTP请求,将内容和元数据发布到服务器端应用程序,然后由该应用程序将相关内容存储到blob和表存储中。
我通过将文件发布到blob存储并从同一页面上的表单集合中获取相关元数据来实现这一点。在POST中,我使用IO蒸汽读取文件和相关元数据,如下所示:
[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存储中。