WebJob для чтения и записи в один и тот же большой двоичный объект Azure.

Я пытаюсь обработать изображения, загруженные в Azure, с помощью webjob. У меня есть 2 контейнера image и thumbs.

В настоящее время я читаю из контейнера image, создаю эскиз и записываю его в контейнер thumbs, используя следующий код, который отлично работает.

public static void GenerateThumbnail([QueueTrigger("addthumb")] ImageDTO blobInfo,
                [Blob("images/{Name}", FileAccess.Read)] Stream input, [Blob("thumbs/{Name}")] CloudBlockBlob outputBlob)
    {
        using (Stream output = outputBlob.OpenWrite())
        {
            ConvertImageToThumbnail(input, output, blobInfo.Name);
            outputBlob.Properties.ContentType = GetMimeType(blobInfo.Name);
        }
    }

Теперь я также хотел бы изменить размер основного изображения из контейнера image (если оно слишком велико), сжать его и заменить им оригинал.

Есть ли способ читать и писать в один и тот же большой двоичный объект?


person CoOl    schedule 11.01.2016    source источник


Ответы (1)


Да, вы можете читать/писать в один и тот же большой двоичный объект. Например, вы можете изменить свою привязку input на привязку к CloudBlockBlob с помощью FileAccess.ReadWrite:

public static void GenerateThumbnail(
    [QueueTrigger("addthumb")] ImageDTO blobInfo,
    [Blob("images/{Name}", FileAccess.ReadWrite)] CloudBlockBlob input,
    [Blob("thumbs/{Name}")] CloudBlockBlob output)
{
    // Process the image  
}

Затем вы можете получить доступ к методам потока OpenRead/OpenWrite в этом большом двоичном объекте, чтобы прочитать большой двоичный объект изображения и обработать/изменить его по мере необходимости.

person mathewc    schedule 11.01.2016
comment
Отлично, скоро попробую! - person CoOl; 11.01.2016
comment
Глядя на ваш пример, я предполагаю, что мне вообще не нужно использовать очередь? Могу ли я активировать функцию веб-задания, когда в контейнер добавляется новый большой двоичный объект? - person CoOl; 11.01.2016
comment
Я только что обновил пример :) Технически вам не нужна очередь, но рекомендуемым шаблоном является использование очереди. BlobTrigger может запускаться автоматически, но возможны задержки, как описано здесь. - person mathewc; 11.01.2016
comment
Могу ли я выполнить множественную привязку к одному и тому же большому двоичному объекту? например, [Blob("images/{Name}", FileAccess.Read)] Stream input, [Blob("images/{Name}")] CloudBlockBlob output ? - person CoOl; 12.01.2016