Переименуйте BLOB, затем сохраните новый - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь использовать Xamarin Blob для сохранения новой версии изображения после переименования предыдущей. например, мое старое изображение находится в контейнере с именем "imagecontainer" и имеет идентификатор с именем "xama_452"

what I would like to do is :

1- Rename the old image name : for example 'xama_452_11_2018"
2-Move it in a container "oldcontainer"
3- then save the new image in "imagecontainer"

Я попробовал какой-то код, я могу загрузить изображение / блоб, но я не могу переименовать его и переместить в другой контейнер.

 protected static async Task<CloudBlockBlob> SaveBlockBlob(string containerName, byte[] blob, string blobTitle)
        {

            var blobContainer = GetBlobContainer(containerName);
            var blockBlob = blobContainer.GetBlockBlobReference(blobTitle);

            var oldBlob = blobContainer.GetBlockBlobReference(blockBlob.Uri.ToString());
            var newBlob = blobContainer.GetBlockBlobReference(blockBlob.Uri.ToString().Replace(blobTitle, DateTime.UtcNow.ToString()+ blobTitle));


            await newBlob.StartCopyAsync(oldBlob);

// here is the methode to upload
            // await blockBlob.UploadFromByteArrayAsync(blob, 0, blob.Length).ConfigureAwait(false);

            return blockBlob;
        }

// method to get blob's container 
 static CloudBlobContainer GetBlobContainer(string containerName) => BlobClient.GetContainerReference(containerName);

Заранее спасибо

1 Ответ

0 голосов
/ 12 ноября 2018

1 - переименуйте старое имя изображения: например, «xama_452_11_2018»

Из-за отсутствия API для переименования файла BLOB-объектов в Azure вы можете установить newBlobName в нужном формате и скопировать источник в место назначения. См. Эту статью .

2-Переместить его в контейнер "oldcontainer"

Вы можете получить блоб контейнера дескрипции для копирования источника. Обратитесь к этому один .

3 - затем сохранить новое изображение в "imagecontainer"

Загрузить BLOB-объект в sourcecontainer. См. Эту статью .

Полные коды указаны ниже:

public static void RenameBlob(string containerName, string destContainer,string blobName,string newblobname)
{
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
    CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer imgcontainer = cloudBlobClient.GetContainerReference(containerName);
    string[] name = blobName.Split('.');
    //rename blob
    string newBlobName = name[0] + "_"+DateTime.Now.ToString("MM")+"_"+DateTime.Now.ToString("yyyy") + "." + name[1];
    CloudBlobContainer oldcontainer = cloudBlobClient.GetContainerReference(destContainer);
    if (!oldcontainer.Exists())
    {
        throw new Exception("Destination container does not exist.");
    }
    CloudBlockBlob blobCopy = oldcontainer.GetBlockBlobReference(newBlobName);
    if (!blobCopy.Exists())
    {
        CloudBlockBlob blob = imgcontainer.GetBlockBlobReference(blobName);
        if (blob.Exists())
        {
            //move blob to oldcontainer
            blobCopy.StartCopy(blob);
            blob.Delete();
        }
    }
    //upload blob to imagecontainer
    CloudBlockBlob cloudblobnew = imgcontainer.GetBlockBlobReference(newblobname);
    cloudblobnew.UploadFromFileAsync(newfile);
}

Если у вас все еще есть проблемы, пожалуйста, дайте мне знать. Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...