C# 如何为移动应用程序同步表配置azure blob存储

C# 如何为移动应用程序同步表配置azure blob存储,c#,azure,xamarin,azure-blob-storage,C#,Azure,Xamarin,Azure Blob Storage,我正在为Azure移动应用程序编写一个管理面板。后端使用Asp.net MVC和实体框架来创建和编辑数据库项 我知道,当与表控制器通信时,xamarin应用程序使用SyncTable类的文件同步功能,以便上传和下载文件以及创建的数据库对象 我想添加与我通过后端创建的数据库对象相对应的图像 我可以通过blob存储上传图像,但我不确定在何处放置文件,以便SyncTable.FileSync方法正确检索图像 ShopItem数据对象 public class ShopItem : EntityData

我正在为Azure移动应用程序编写一个管理面板。后端使用Asp.net MVC和实体框架来创建和编辑数据库项

我知道,当与表控制器通信时,xamarin应用程序使用
SyncTable
类的文件同步功能,以便上传和下载文件以及创建的数据库对象

我想添加与我通过后端创建的数据库对象相对应的图像

我可以通过blob存储上传图像,但我不确定在何处放置文件,以便SyncTable.FileSync方法正确检索图像

ShopItem数据对象

public class ShopItem : EntityData
    {
        public decimal Price { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string Note { get; set; }
    }
布隆德勒

public class BlobHandler
    {
        // Retrieve storage account from connection string.
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
        CloudConfigurationManager.GetSetting("StorageConnectionString"));

        private string imageDirectoryUrl;

        /// <summary>
        /// Receives the users Id for where the pictures are and creates 
        /// a blob storage with that name if it does not exist.
        /// </summary>
        /// <param name="imageDirectoryUrl"></param>
        public BlobHandler(string imageDirecoryUrl)
        {
            this.imageDirectoryUrl = imageDirecoryUrl;
            // Create the blob client.
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

            // Retrieve a reference to a container. 
            CloudBlobContainer container = blobClient.GetContainerReference(imageDirecoryUrl);

            // Create the container if it doesn't already exist.
            container.CreateIfNotExists();

            //Make available to everyone
            container.SetPermissions(
                new BlobContainerPermissions
                {
                    PublicAccess = BlobContainerPublicAccessType.Blob
                });
        }

        public void Upload(IEnumerable<HttpPostedFileBase> file)
        {
            // Create the blob client.
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

            // Retrieve a reference to a container. 
            CloudBlobContainer container = blobClient.GetContainerReference(imageDirectoryUrl);

            if (file != null)
            {
                foreach (var f in file)
                {
                    if (f != null)
                    {
                        CloudBlockBlob blockBlob = container.GetBlockBlobReference(f.FileName);
                        blockBlob.UploadFromStream(f.InputStream);
                    }
                }
            }
        }

        public List<string> GetBlobs()
        {
            // Create the blob client. 
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

            // Retrieve reference to a previously created container.
            CloudBlobContainer container = blobClient.GetContainerReference(imageDirectoryUrl);

            List<string> blobs = new List<string>();

            // Loop over blobs within the container and output the URI to each of them
            foreach (var blobItem in container.ListBlobs())
                blobs.Add(blobItem.Uri.ToString());

            return blobs;
        }
    }
公共类BlobHandler
{
//从连接字符串中检索存储帐户。
CloudStorageAccount-storageAccount=CloudStorageAccount.Parse(
GetSetting(“StorageConnectionString”);
私有字符串imageDirectoryUrl;
/// 
///接收图片所在位置的用户Id并创建
///具有该名称的blob存储(如果不存在)。
/// 
/// 
公共BlobHandler(字符串imageDirecoryUrl)
{
this.imageDirectoryUrl=imageDirectoryUrl;
//创建blob客户端。
CloudBlobClient blobClient=storageAccount.CreateCloudBlobClient();
//检索对容器的引用。
CloudBlobContainer container=blobClient.GetContainerReference(imageDirecoryUrl);
//如果容器尚不存在,请创建该容器。
container.CreateIfNotExists();
//提供给每个人
container.SetPermissions(
新BlobContainerPermissions
{
PublicAccess=BlobContainerPublicAccessType.Blob
});
}
公共无效上载(IEnumerable文件)
{
//创建blob客户端。
CloudBlobClient blobClient=storageAccount.CreateCloudBlobClient();
//检索对容器的引用。
CloudBlobContainer container=blobClient.GetContainerReference(imageDirectoryUrl);
如果(文件!=null)
{
foreach(文件中的var f)
{
如果(f!=null)
{
CloudBlockBlob blockBlob=container.getblockblobbreference(f.FileName);
blockBlob.UploadFromStream(f.InputStream);
}
}
}
}
公共列表GetBlobs()
{
//创建blob客户端。
CloudBlobClient blobClient=storageAccount.CreateCloudBlobClient();
//检索对以前创建的容器的引用。
CloudBlobContainer container=blobClient.GetContainerReference(imageDirectoryUrl);
List BLOB=新列表();
//循环容器中的blob并将URI输出到每个blob
foreach(container.ListBlobs()中的var blobItem)
Add(blobItem.Uri.ToString());
返回斑点;
}
}
用于发布图像的ActionResult

public ActionResult Upload(IEnumerable<HttpPostedFileBase> file)
        {
            BlobHandler bh = new BlobHandler("containername");
            bh.Upload(file);
            var blobUris = bh.GetBlobs();

            return RedirectToAction("Index", blobUris);
        }
公共操作结果上传(IEnumerable文件) { BlobHandler bh=新BlobHandler(“容器名称”); 上传(文件); var blobUris=bh.GetBlobs(); 返回重定向操作(“索引”,blobUris); }