- Эта статья преследует две основные цели: (1) научить вас, что вы можете размещать веб-контент очень экономно; (2) Покажите, как вы можете создать свою собственную систему управления BLOB-объектами в облаке.
- Загрузите исходный код для моего проекта VS 2012 RC:
- Хостинг веб-контента в виде большого двоичного объекта в Windows Azure является мощным средством . Начнем с того, что это чрезвычайно экономично ; это не требует от вас размещения веб-сервера самостоятельно. В результате капли очень рентабельны. Во-вторых, другой мощный аспект размещения html-содержимого в виде больших двоичных объектов в Windows Azure заключается в том, что вы получаете то, что большие двоичные объекты копируются три раза . Он всегда будет доступен с поддержкой SLA.
- Я использую размещенные в Windows Azure большие двоичные объекты для своего блога. Я храню HTML, Javascript и таблицы стилей. Я также управляю видеоконтентом. Вы можете увидеть мою статью в журнале MSDN для более подробной информации.
- Я могу хранить все, что захочу. Когда вы посещаете мой блог, вы извлекаете контент из служб хранения Windows Azure.
Смотрите мою статью в MSDN Magazine, Демократизация видеоконтента с помощью Windows Azure Media Services. http://msdn.microsoft.com/en-us/magazine/jj133821.aspx - Вы можете динамически создавать контент, а затем загружать его в Azure. Я покажу вам, как загрузить веб-страницу в виде блоба.
- Но эта веб-страница может быть динамически создана на основе базы данных. Код, который я собираюсь показать, бесконечно гибок. Вы можете адаптировать его для программного управления всем вашим контентом .
- Я проиллюстрирую последние инструменты и технологии, начиная с июля 2012 года. Это означает, что мы будем использовать:
- Windows 8
- Visual Studio 2012 RC
- Azure SDK и набор инструментов 1.7
- Я предполагаю, что у вас есть учетная запись Azure (доступны бесплатные пробные версии)
Скачать исходный код | https://skydrive.live.com/embed?cid=98B7747CD2E738FB&resid=98B7747CD2E738FB%212850&authkey=AAWxTD4cCiYKJ60 |
Бесплатная пробная версия | http://www.windowsazure.com/en-us/pricing/free-trial/?WT.mc_id=A733F5829 |
2 основных типа капли
- Обслуживающие хранения предлагает два типа из блоб s, блок BLOB s и страница блоб сек .
- Вы указываете тип BLOB-объекта при создании BLOB-объекта .
- Вы можете хранить текстовые и двоичные данные в любом из « двух типов BLOB- объектов »:
- Блок BLOB-объектов , которые оптимизированы для потоковой передачи.
- Страничные BLOB-объекты , которые оптимизированы для случайных операций чтения / записи и которые предоставляют возможность записи в диапазон байтов в BLOB-объекте .
- Windows Azure Blob хранение это сервис для хранения больших объемов неструктурированных данных , которые могут быть доступны из любой точки мира через HTTP или HTTPS.
- Один двоичный объект может быть сотни гигабайт в размерах , и одного счета для хранения может содержать до 100 ТБ в блоб с .
- Общие способы использования хранилища BLOB- объектов включают в себя:
- Обслуживание изображений или документов непосредственно в браузере
- Хранение файлов для распределенного доступа
- Потоковое видео и аудио
- Выполнение безопасного резервного копирования и аварийного восстановления
- Хранение данных для анализа локальной службой или службой Windows Azure
- После того , как сгусток был создан, его тип не может быть изменен , и «она может быть обновлена только с помощью операции , соответствующей для этого двоичного объекта типа», то есть, написания блок или списка блока s в блоке сгусток , и писать страницы в страничный блоб .
- Все BLOB s отражают зафиксированные изменения немедленно .
- Каждая версия сгустка имеет уникальный тег, называемый ETag, который можно использовать с условиями доступа , чтобы обеспечить вас изменить только конкретный экземпляр сгустка .
- Любой BLOB-объект можно арендовать для эксклюзивного доступа для записи .
- Когда капля в аренду, только вызовы , которые включают в себя текущий идентификатор аренды может изменить блоб или (для блочного Blob сек) его блок s.
- Вы можете назначить атрибуты для BLOB-объектов, а затем запросить эти атрибуты в соответствующем контейнере с помощью LINQ.
- BLOB-объекты позволяют записывать байты для определенных смещений. Вы можете наслаждаться типичными операциями чтения / записи, ориентированными на блок .
- Обратите внимание на следующие атрибуты хранилища BLOB- объектов :
- Аккаунт хранения
- Весь доступ к хранилищу Windows Azure осуществляется через учетную запись хранилища . Это самый высокий уровень пространства имен для доступа к BLOB-объектам . Аккаунт может содержать неограниченное количество контейнеров, если их общий размер не превышает 100 ТБ .
- Контейнер
- Контейнер обеспечивает группировку набора BLOB- объектов . Все BLOB-объекты должны быть в контейнере. Аккаунт может содержать неограниченное количество контейнеров. Контейнер может хранить неограниченное количество BLOB- объектов .
- капля
- Файл любого типа и размера.
- Аккаунт хранения
- «Один блок блоб может быть до 200GB в размерах». «Страничный блоб , другой тип блоба , может иметь размер до 1 ТБ» и более эффективен, когда диапазоны байтов в файле часто изменяются. Для получения дополнительной информации о BLOB-объектах см. Основные сведения о BLOB- объектах и Page BLOB-объектах .
- Формат URL
- К BLOB-объектам можно обращаться, используя следующий формат URL:
- Http: //. blob .core.windows.net /
Веб-страницы как капли
- Как я уже объяснил, я показываю, как я использую свой блог в Windows Azure [1]. Моя главная страница блога начинается с < iframe > [2] [3]. Этот тег позволяет встроить HTML-страницу в HTML-страницу . Мой пост в основном состоит из склеенных элементов iframe . Одним из таких iframe является меню для статей, которые я создал. Это действительно набор гиперссылок в стиле метро .
- Как я уже говорил, этот пост рассказывает о том, как я питаю свой блог [1]. Этот пост о создании веб-контента и хранении его в виде блога веб-страницы в центре обработки данных MS. Левый фрейм в моем блоге — не что иное, как фрейм с веб-страницей. [2] [3]
- Название веб-страницы — key_links.html. Key_links.html генерируется локально, затем загружается в хранилище блога.
- Панель слева, на которой написано Популярные сообщения . Это просто встроенная веб-страница, которая хранится в виде большого двоичного объекта в Windows Azure . Я загружаю блоб через приложение для Windows 8, которое собираюсь создать для вас.
- Реальная, которую я использую, его немного сложнее . Он использует базу данных SQL Server, которая имеет источник контента, который вы видите в популярных сообщениях .
- Для моего блога все, что я делаю — это постоянно обновляю базу данных. Настраиваемое приложение, которое мы пишем, создает пользовательскую веб-страницу на основе ранее введенных мной данных сервера SQL.
- Затем мое приложение просто перебирает строки в таблице базы данных сервера SQL и генерирует красочную сетку, которую вы видите под названием Популярные сообщения .
- Вы можете увидеть мой блоб, хранящийся здесь:
- https://brunoblogcontent.blob.core.windows.net/blobcalendarcontent/key_links.html
Динамически создается на основе данных SQL Server
- Вы можете перейти непосредственно к содержимому моего блоба.
- https://brunoblogcontent.blob.core.windows.net/blobcalendarcontent/key_links.html
- Дело в том, что Key_links.html генерируется на основе записей в таблице базы данных.
- Вы также можете хранить записи в облаке, используя базу данных SQL (ранее SQL Azure).
- Этот пост будет посвящен тому, как вы должны отправить key_links.html и разместить его в службе хранения Windows Azure.
- Здесь вы можете увидеть связь между данными таблицы и соответствующим содержимым HTML .
- Метроподобный веб-интерфейс, который вы видите там, динамически генерируется приложением Windows 8. Мы не будем делать динамическое создание здесь.
- Я использовал Visual Studio 2012 RC для написания приложения для Windows 8. Для загрузки всего необходимого мне необходим Windows Azure SDK и Tooling.
Добавление приложения WPF
- В меню Файл выберите Новый, а затем нажмите Проект .
- В диалоговом окне « Новый проект » выберите один из типов проектов на левой панели.
- Выберите Windows шаблона проекта из правой панели.
- На средней панели выберите Приложение WPF.
- Введите имя для нового проекта.
- Я выбрал UploadBlob
Создание приложения WPFМы можем начать перетаскивать элементы управления поверх. Мы будем перетаскивать кнопки, текстовые поля и метки. На самом деле, я предоставлю вам код XAML. В приложениях WPF пользовательский интерфейс встроен в XAML.
- Это только для иллюстрации. Я предоставлю вам весь код XAML через минуту, чтобы вам не пришлось ничего перетаскивать.
Перетаскивание элемента управления создает XAML
- Я здесь очень подробно. Надеемся, что большинство разработчиков увидят, что при перетаскивании элемента управления генерируется код XAML. Обратите внимание, что мы перетащили в кнопку.
- Также обратите внимание, что код XAML ниже.
- Вы можете увидеть тег <Button>.
- Это только для иллюстрации. Я предоставлю вам весь код XAML через минуту.
Готовое приложение, которое мы создаем Вот интерфейс, который мы хотели бы создать.
- Он имеет одну кнопку, 2 метки и 2 текстовых поля. Я дам вам код XAML через некоторое время
Наше приложение закончено и работает
- Вот как это выглядит при запуске.
- В верхнем текстовом поле будет отображена HTML-страница, которую мы загрузим в облако.
- Второе текстовое поле покажет пользователю ход выполнения загрузки.
Сборка приложения
- Давайте начнем создавать приложение. Первая задача — установить несколько ссылок.
- Нам нужна ссылка на Windows Azure SDK.
- Мы добавим ссылку для поддержки операторов Assert () в коде.
- Для пользовательского интерфейса мы добавим код XAML (я предоставлю)
- Логика программирования будет обрабатываться кодом ниже.
- Получите 90-дневную пробную версию Windows Azure.
- Скачать ссылку ниже:
- http://www.windowsazure.com/en-us/pricing/free-trial/
Подключение к инструменту Azure
- Обратите внимание на две ссылки добавлены.
- Один для инструментов качества
- Таким образом, мы можем сделать Утверждения в коде
- Один для клиента хранения
- Таким образом, мы можем загружать капли
- Один для инструментов качества
- Вам нужно будет выбрать кнопку обзора .
MainWindow.xaml
- Эта статья преследует две основные цели: (1) научить вас, что вы можете размещать веб-контент очень экономно; (2) Покажите, как вы можете создать свою собственную систему управления BLOB-объектами в облаке.
- Загрузите исходный код для моего проекта VS 2012 RC:
- Хостинг веб-контента в виде большого двоичного объекта в Windows Azure является мощным средством . Начнем с того, что это чрезвычайно экономично ; это не требует от вас размещения веб-сервера самостоятельно. В результате капли очень рентабельны. Во-вторых, другой мощный аспект размещения html-содержимого в виде больших двоичных объектов в Windows Azure заключается в том, что вы получаете то, что большие двоичные объекты копируются три раза . Он всегда будет доступен с поддержкой SLA.
- Я использую размещенные в Windows Azure большие двоичные объекты для своего блога. Я храню HTML, Javascript и таблицы стилей. Я также управляю видеоконтентом. Вы можете увидеть мою статью в журнале MSDN для более подробной информации.
- Я могу хранить все, что захочу. Когда вы посещаете мой блог, вы извлекаете контент из служб хранения Windows Azure.
Смотрите мою статью в MSDN Magazine, Демократизация видеоконтента с помощью Windows Azure Media Services. http://msdn.microsoft.com/en-us/magazine/jj133821.aspx - Вы можете динамически создавать контент, а затем загружать его в Azure. Я покажу вам, как загрузить веб-страницу в виде блоба.
- Но эта веб-страница может быть динамически создана на основе базы данных. Код, который я собираюсь показать, бесконечно гибок. Вы можете адаптировать его для программного управления всем вашим контентом .
- Я проиллюстрирую последние инструменты и технологии, начиная с июля 2012 года. Это означает, что мы будем использовать:
- Windows 8
- Visual Studio 2012 RC
- Azure SDK и набор инструментов 1.7
- Я предполагаю, что у вас есть учетная запись Azure (доступны бесплатные пробные версии)
Скачать исходный код | https://skydrive.live.com/embed?cid=98B7747CD2E738FB&resid=98B7747CD2E738FB%212850&authkey=AAWxTD4cCiYKJ60 |
Бесплатная пробная версия | http://www.windowsazure.com/en-us/pricing/free-trial/?WT.mc_id=A733F5829 |
2 основных типа капли
- Обслуживающие хранения предлагает два типа из блоб s, блок BLOB s и страница блоб сек .
- Вы указываете тип BLOB-объекта при создании BLOB-объекта .
- Вы можете хранить текстовые и двоичные данные в любом из « двух типов BLOB- объектов »:
- Блок BLOB-объектов , которые оптимизированы для потоковой передачи.
- Страничные BLOB-объекты , которые оптимизированы для случайных операций чтения / записи и которые предоставляют возможность записи в диапазон байтов в BLOB-объекте .
- Windows Azure Blob хранение это сервис для хранения больших объемов неструктурированных данных , которые могут быть доступны из любой точки мира через HTTP или HTTPS.
- Один двоичный объект может быть сотни гигабайт в размерах , и одного счета для хранения может содержать до 100 ТБ в блоб с .
- Общие способы использования хранилища BLOB- объектов включают в себя:
- Обслуживание изображений или документов непосредственно в браузере
- Хранение файлов для распределенного доступа
- Потоковое видео и аудио
- Выполнение безопасного резервного копирования и аварийного восстановления
- Хранение данных для анализа локальной службой или службой Windows Azure
- После того , как сгусток был создан, его тип не может быть изменен , и «она может быть обновлена только с помощью операции , соответствующей для этого двоичного объекта типа», то есть, написания блок или списка блока s в блоке сгусток , и писать страницы в страничный блоб .
- Все BLOB s отражают зафиксированные изменения немедленно .
- Каждая версия сгустка имеет уникальный тег, называемый ETag, который можно использовать с условиями доступа , чтобы обеспечить вас изменить только конкретный экземпляр сгустка .
- Любой BLOB-объект можно арендовать для эксклюзивного доступа для записи .
- Когда капля в аренду, только вызовы , которые включают в себя текущий идентификатор аренды может изменить блоб или (для блочного Blob сек) его блок s.
- Вы можете назначить атрибуты для BLOB-объектов, а затем запросить эти атрибуты в соответствующем контейнере с помощью LINQ.
- BLOB-объекты позволяют записывать байты для определенных смещений. Вы можете наслаждаться типичными операциями чтения / записи, ориентированными на блок .
- Обратите внимание на следующие атрибуты хранилища BLOB- объектов :
- Аккаунт хранения
- Весь доступ к хранилищу Windows Azure осуществляется через учетную запись хранилища . Это самый высокий уровень пространства имен для доступа к BLOB-объектам . Аккаунт может содержать неограниченное количество контейнеров, если их общий размер не превышает 100 ТБ .
- Контейнер
- Контейнер обеспечивает группировку набора BLOB- объектов . Все BLOB-объекты должны быть в контейнере. Аккаунт может содержать неограниченное количество контейнеров. Контейнер может хранить неограниченное количество BLOB- объектов .
- капля
- Файл любого типа и размера.
- Аккаунт хранения
- «Один блок блоб может быть до 200GB в размерах». «Страничный блоб , другой тип блоба , может иметь размер до 1 ТБ» и более эффективен, когда диапазоны байтов в файле часто изменяются. Для получения дополнительной информации о BLOB-объектах см. Основные сведения о BLOB- объектах и Page BLOB-объектах .
- Формат URL
- К BLOB-объектам можно обращаться, используя следующий формат URL:
- Http: //. blob .core.windows.net /
Веб-страницы как капли
- Как я уже объяснил, я показываю, как я использую свой блог в Windows Azure [1]. Моя главная страница блога начинается с < iframe > [2] [3]. Этот тег позволяет встроить HTML-страницу в HTML-страницу . Мой пост в основном состоит из склеенных элементов iframe . Одним из таких iframe является меню для статей, которые я создал. Это действительно набор гиперссылок в стиле метро .
- Как я уже говорил, этот пост рассказывает о том, как я питаю свой блог [1]. Этот пост о создании веб-контента и хранении его в виде блога веб-страницы в центре обработки данных MS. Левый фрейм в моем блоге — не что иное, как фрейм с веб-страницей. [2] [3]
- Название веб-страницы — key_links.html. Key_links.html генерируется локально, затем загружается в хранилище блога.
- Панель слева, на которой написано Популярные сообщения . Это просто встроенная веб-страница, которая хранится в виде большого двоичного объекта в Windows Azure . Я загружаю блоб через приложение для Windows 8, которое собираюсь создать для вас.
- Реальная, которую я использую, его немного сложнее . Он использует базу данных SQL Server, которая имеет источник контента, который вы видите в популярных сообщениях .
- Для моего блога все, что я делаю — это постоянно обновляю базу данных. Настраиваемое приложение, которое мы пишем, создает пользовательскую веб-страницу на основе ранее введенных мной данных сервера SQL.
- Затем мое приложение просто перебирает строки в таблице базы данных сервера SQL и генерирует красочную сетку, которую вы видите под названием Популярные сообщения .
- Вы можете увидеть мой блоб, хранящийся здесь:
- https://brunoblogcontent.blob.core.windows.net/blobcalendarcontent/key_links.html
Динамически создается на основе данных SQL Server
- Вы можете перейти непосредственно к содержимому моего блоба.
- https://brunoblogcontent.blob.core.windows.net/blobcalendarcontent/key_links.html
- Дело в том, что Key_links.html генерируется на основе записей в таблице базы данных.
- Вы также можете хранить записи в облаке, используя базу данных SQL (ранее SQL Azure).
- Этот пост будет посвящен тому, как вы должны отправить key_links.html и разместить его в службе хранения Windows Azure.
- Здесь вы можете увидеть связь между данными таблицы и соответствующим содержимым HTML .
- Метроподобный веб-интерфейс, который вы видите там, динамически генерируется приложением Windows 8. Мы не будем делать динамическое создание здесь.
- Я использовал Visual Studio 2012 RC для написания приложения для Windows 8. Для загрузки всего необходимого мне необходим Windows Azure SDK и Tooling.
Добавление приложения WPF
- В меню Файл выберите Новый, а затем нажмите Проект .
- В диалоговом окне « Новый проект » выберите один из типов проектов на левой панели.
- Выберите Windows шаблона проекта из правой панели.
- На средней панели выберите Приложение WPF.
- Введите имя для нового проекта.
- Я выбрал UploadBlob
Создание приложения WPFМы можем начать перетаскивать элементы управления поверх. Мы будем перетаскивать кнопки, текстовые поля и метки. На самом деле, я предоставлю вам код XAML. В приложениях WPF пользовательский интерфейс встроен в XAML.
- Это только для иллюстрации. Я предоставлю вам весь код XAML через минуту, чтобы вам не пришлось ничего перетаскивать.
Перетаскивание элемента управления создает XAML
- Я здесь очень подробно. Надеемся, что большинство разработчиков увидят, что при перетаскивании элемента управления генерируется код XAML. Обратите внимание, что мы перетащили в кнопку.
- Также обратите внимание, что код XAML ниже.
- Вы можете увидеть тег <Button>.
- Это только для иллюстрации. Я предоставлю вам весь код XAML через минуту.
Готовое приложение, которое мы создаем Вот интерфейс, который мы хотели бы создать.
- Он имеет одну кнопку, 2 метки и 2 текстовых поля. Я дам вам код XAML через некоторое время
Наше приложение закончено и работает
- Вот как это выглядит при запуске.
- В верхнем текстовом поле будет отображена HTML-страница, которую мы загрузим в облако.
- Второе текстовое поле покажет пользователю ход выполнения загрузки.
Сборка приложения
- Давайте начнем создавать приложение. Первая задача — установить несколько ссылок.
- Нам нужна ссылка на Windows Azure SDK.
- Мы добавим ссылку для поддержки операторов Assert () в коде.
- Для пользовательского интерфейса мы добавим код XAML (я предоставлю)
- Логика программирования будет обрабатываться кодом ниже.
- Получите 90-дневную пробную версию Windows Azure.
- Скачать ссылку ниже:
- http://www.windowsazure.com/en-us/pricing/free-trial/
Подключение к инструменту Azure
- Обратите внимание на две ссылки добавлены.
- Один для инструментов качества
- Таким образом, мы можем сделать Утверждения в коде
- Один для клиента хранения
- Таким образом, мы можем загружать капли
- Один для инструментов качества
- Вам нужно будет выбрать кнопку обзора .
MainWindow.xaml
<Window x:Class="UploadBlob.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <Button Name="buttonUploadBlob" Click="buttonUploadBlob_Click" Content="Upload Blob (Web Page)" HorizontalAlignment="Left" Margin="37,31,0,0" VerticalAlignment="Top" Width="160" Height="46"/> <TextBox Name="txtCodeToUpload" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" Margin="37,117,28.4,0" VerticalAlignment="Top" Height="69" >Filled at run time with text to upload</TextBox> <TextBox Name="txtWorkDone" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" Margin="37,215,28.4,0" VerticalAlignment="Top" Height="69" Text="Filled at run time with how much progress has been made"/> <Label Content="Text to be upload to cloud" HorizontalAlignment="Left" Margin="37,91,0,0" VerticalAlignment="Top"/> <Label Content="Files successfully uploaded to cloud" HorizontalAlignment="Left" Margin="37,191,0,0" VerticalAlignment="Top"/> </Grid> </Window>
- Теперь мы продолжим добавлять основную логику программирования.
- Код позади необходим для выполнения основной работы по загрузке ваших блобов.
- Когда пользователь нажимает кнопку загрузки, программное обеспечение берет существующую веб-страницу и загружает ее в Windows Azure Storage Services.
MainWindow.xaml.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Threading; namespace UploadBlob { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } public void UpdateGui(string msg, string content) { Dispatcher.BeginInvoke(DispatcherPriority.Input, (ThreadStart)( () => { this.txtWorkDone.Text += Environment.NewLine + string.Format( "We are uploading {0}", msg); this.txtCodeToUpload.Text += Environment.NewLine + string.Format( "We are uploading {0}", content); })); } private string GetStringFromFileName(string path) { FileIOReader file_io = new FileIOReader(path); string s = file_io.ReadFile(); file_io.Close(); return s; } private void buttonUploadBlob_Click(object sender, RoutedEventArgs e) { // Get file path to BrunoPage.html. It is in the "content" folder. string curr_file = System.IO.Path.Combine(Environment.CurrentDirectory, @"..\..\Content\" + "BrunoPage.html"); // Open file and load content for uploading to Azure string html_content_to_upload = GetStringFromFileName(curr_file); // Kick off thread to do the uploading. Use Task-based threading. // Get help from BlobManager code. Task<string> taskOpenEndpoint = Task<string>.Factory.StartNew(() => { // Use blob manager for encapsulation BlobManager bu = new BlobManager(); // Upload the web page. (1) Pass in the callback method to update the gui. // In other words, BlobManager can update the gui. // (2) Pass in the string containing the web content I want to host in the cloud. // (3) Pass in the destination web page bu.UploadWebPage(this.UpdateGui, html_content_to_upload, "BrunoPageDestination.html"); return ""; }); UpdateGui(curr_file, "We are done"); } } }
Добавление двух вспомогательных классов
- После того, как вы вставите основной код, вам нужно будет сгенерировать несколько классов.
- После генерации мы вставим еще больше кода в эти только что сгенерированные классы.
- Вы можете видеть, что мы собираемся в два класса, чтобы генерировать пустые классы.
- FileIOReader
- BlobManager
- Просто наведите курсор на имя класса, щелкните правой кнопкой мыши и выберите « Создать класс».
FileIOReader.cs
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace UploadBlob { public class FileIOReader { FileStream fs_reader = null; StreamReader stream_reader = null; public FileIOReader(string path) { fs_reader = File.Open(path, FileMode.Open); stream_reader = new StreamReader(fs_reader); } public bool HasData() { return (stream_reader.EndOfStream == false); } public string ReadFile() { return stream_reader.ReadToEnd().ToString(); } public void ReadLine(ref string s) { s = stream_reader.ReadLine(); } public void Close() { stream_reader.Close(); fs_reader.Close(); } } public class FileIOWriter { FileStream fs_writer = null; StreamWriter stream_writer = null; public FileIOWriter(string path) { if (File.Exists(path)) { File.Delete(path); } fs_writer = File.Create(path); stream_writer = new StreamWriter(fs_writer); } public void WriteLine(string s) { stream_writer.WriteLine(s); } public void Close() { stream_writer.Close(); fs_writer.Close(); } } }
BlobManager.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.StorageClient; namespace UploadBlob { class BlobManager { public void UploadWebPage(Action<string, string> UpdateGui, string codeToUpload, string output_filename) { // Notify user of upload process. UpdateGui("Starting to process " + output_filename, codeToUpload); // Our blob client object to do the actual upload. // This is part of the Azure SDK CloudBlobClient blobStorage = null; // Required function for managing cloud connection strings Microsoft.WindowsAzure.CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) => { configSetter(configName); }); // Read account configuration settings // We will retrieve (1) account name (2) account secret key string connectionString = null; string formatter_for_connection = Properties.Settings.Default.DataConnectionstringProduction; string accountName = Properties.Settings.Default.accountname; string accountKey = Properties.Settings.Default.accountkey; // Build up a connection string connectionString = string.Format(formatter_for_connection, accountName, accountKey); // Show the user the connection string. UpdateGui(output_filename, "Connection string is " + connectionString); // The storage account IS the connection string value var storageAccount = CloudStorageAccount.FromConfigurationSetting(connectionString); // Define a container for the web page. string blobContainerName = "blobcalendarcontent"; // Load an object to do the uploading work. blobStorage = storageAccount.CreateCloudBlobClient(); // Verify the container is built. CloudBlobContainer container = blobStorage.GetContainerReference(blobContainerName); container.CreateIfNotExist(); // Some basic error checking and diagnostics. Assert.AreEqual<string>( string.Format(@"https://brunoblogcontent.blob.core.windows.net/{0}", blobContainerName), container.Uri.ToString()); Assert.AreEqual<string>(blobContainerName, container.Name.ToString()); // Make sure to configure container for public access var permissions = container.GetPermissions(); permissions.PublicAccess = BlobContainerPublicAccessType.Container; // Verify not public alraady Assert.AreNotEqual(permissions.PublicAccess, null); // Now make public. container.SetPermissions(permissions); // Build up the blob name string uniqueBlobName = string.Format("{0}/{1}", blobContainerName, output_filename); CloudBlockBlob blob = blobStorage.GetBlockBlobReference(uniqueBlobName); // Set content type to reflect web page. Different for video, css, etc. blob.Properties.ContentType = "text/html"; // Tell user upload is happening. UpdateGui("uniqueBlobName is " + uniqueBlobName, codeToUpload); UpdateGui("uri is " + blob.Uri.AbsoluteUri.ToString(), codeToUpload); // Finally, the actual upload. blob.UploadText(codeToUpload); // Output to diagnostics window. System.Diagnostics.Trace.TraceInformation("Uploaded image '{0}'", uniqueBlobName); } } }
У вас должна быть учетная запись на портале Windows Azure
- Вы получаете эту информацию с портала Windows Azure
- Портал, где вы получаете имя учетной записи и ключ учетной записи
- Вам нужно будет нажать на кнопку « Просмотр» .
- Сохраните эту информацию, чтобы вы могли вставить ее в приложение.
- Вы можете думать об этой информации как имя пользователя и пароль.
Портал
- Портал, где вы получаете имя учетной записи и ключ учетной записи
- Вам нужно будет нажать на кнопку « Просмотр» .
- Сохраните эту информацию, чтобы вы могли вставить ее в приложение.
- Вы можете думать об этой информации как имя пользователя и пароль.
Settings.settings
<?xml version='1.0' encoding='utf-8' > <SettingsFile xmlns="uri:settings" CurrentProfile="(Default)"> <Profiles> <Profile Name="(Default)" /> </Profiles> <Settings > <Setting Name="accountname" Type="System.String" Scope="User"> <Value Profile="(Default)">brunoblogcontent</Value> </Setting> <Setting Name="accountkey" Type="System.String" Scope="User"> <Value Profile="(Default)">oOTLSWgSvFFIECZU21VdUc/FtSv4oksXv5J4F/VEuWfhiWFvSb0u0xMDSvhblkxci+VZduxzZBXZMolAb9gUkw==</Value> </Setting> <Setting Name="DataConnectionstringProduction" Type="System.String" Scope="User"> <Value Profile="(Default)">DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}</Value> </Setting> </Settings> </SettingsFile>
Определение блоба, который вы будете загружать
- Теперь нам нужно определить, какой контент, который мы хотим загрузить, имеет большой двоичный объект в службе хранения Windows Azure. В нашем случае мы просто загрузим веб-страницу. Также можно загружать практически все, что угодно, например, zip-файлы, MP3-файлы, видео, практически все, что только можно придумать.
- Вы можете щелкнуть правой кнопкой мыши на проекте, что позволит вам добавить новую папку. Оттуда вы можете добавить новый элемент , который в нашем случае будет веб-страницей, в основном HTML-файлом .
- Щелкните правой кнопкой мыши проект и выберите « Добавить» , « Новая папка».
- Позвоните в папку Content
- Щелкните правой кнопкой мыши новую папку ( Содержимое ) и выберите Добавить новый элемент.
- Веб-страница будет называться BrunoPage.html.
- Вы можете называть это как хотите, но вам нужно запомнить это для кода. Это очевидно должно соответствовать.
BrunoPage.html
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title></title> </head> <body> <strong>Store this as a blob in a Microsoft data center. </strong> </body> </html>
BLOB-объект и запущенное приложение
- Запуск приложения и загрузка веб-страницы (блоб)
- BrunoPage.html можно увидеть выше. Обратите внимание на тег <body>, который мы добавили.
- Щелкните правой кнопкой мыши BrunoPage.html и выберите открыть
- Введите код, который вы видите выше. Я назвал новый файл BrunoPageDestination.html
- http://brunoblogcontent.blob.core.windows.net/blobcalendarcontent/BrunoPageDestination.html
Использование Azure Storage Explorer
- Вы можете скачать Azure Storage Explorer здесь:
- http://azurestorageexplorer.codeplex.com/
- Azure Storage Explorer поможет вам просмотреть загруженный BLOB-объект.
- Он также работает с таблицами и очередями (2 других типа хранилища, связанных с Azure)
- После того, как вы ввели данные своей учетной записи, вы можете просто нажать на капли.
- После установки вам нужно будет настроить свою учетную запись.
- Это тот же процесс, что и раньше.
- Вам нужно будет зайти на портал и получить имя учетной записи и ключ учетной записи.
- Это тот же процесс, что и раньше.
Взаимодействие с Azure Storage Explorer
- Обратите внимание, что контейнер был назван blobcalendarcontent
- Это было определено нашим кодом (MainWindow.xaml.cs)
Бурение в нашем блобе (веб-страница)
- Azure Storage Explorer может помочь вам получить абсолютный URI вашего содержимого BLOB-объекта.
- Вы также можете заметить, что ContentType является text / html
Просмотр веб-страницы, которую мы загрузили
- Вы могли бы пойти туда прямо сейчас.
- http://brunoblogcontent.blob.core.windows.net/blobcalendarcontent/BrunoPageDestination.html
Вывод
- Это был амбициозный пост. Это покрыло много интересного.
- Я позволю вам создавать динамически генерируемый контент.
- Следовать за
- Понимание блочных и блобных страниц
- http://msdn.microsoft.com/en-us/library/windowsazure/ee691964.aspx
- Visual Studio 2012 RC загрузки
- http://www.microsoft.com/visualstudio/11/en-us/downloads#
- Загрузить: Windows Azure SDK для .NET
- http://www.windowsazure.com/en-us/pricing/free-trial/
- Понимание блочных и блобных страниц