使用一个HTTP Post将文件保存到blob存储区并将关联元数据保存到表存储区



我想上传一个文件到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存储中。

最新更新