Windows Azure: создание файла в контейнере облачных блобов - PullRequest
2 голосов
/ 12 апреля 2010

Я пишу программу, которая будет выполняться в облаке. Программа создаст вывод, который должен быть записан в файл, и файл должен быть сохранен в контейнере BLOB-объектов.

Я понятия не имею, как это сделать

Будет ли этот код

FileStream fs = new FileStream(file, FileMode.Create);
        StreamWriter sw = new StreamWriter(fs);

создать файл с именем "file" в облаке ...


Оу .. тогда как сохранить содержимое в BLOB-объекте *

1 Ответ

1 голос
/ 12 августа 2013

Вы пытаетесь загрузить блоб страницы или блоб блоб? Обычно блочные блобы - это то, что требуется, если вы не собираетесь создавать виртуальную машину из образа блоба, тогда нужен блоб страницы.

Нечто подобное работает, однако. Этот фрагмент взят из самой замечательной Blob Transfer Utility Проверьте все свои потребности в загрузке и загрузке BLOB-объектов (Просто измените тип с блока на страницу, если вам нужен виртуальный жесткий диск)

public void UploadBlobAsync(ICloudBlob blob, string LocalFile)
    {
        // The class currently stores state in class level variables so calling UploadBlobAsync or DownloadBlobAsync a second time will cause problems.
        // A better long term solution would be to better encapsulate the state, but the current solution works for the needs of my primary client.
        // Throw an exception if UploadBlobAsync or DownloadBlobAsync has already been called.
        lock (WorkingLock)
        {
            if (!Working)
                Working = true;
            else
                throw new Exception("BlobTransfer already initiated. Create new BlobTransfer object to initiate a new file transfer.");
        }

        // Attempt to open the file first so that we throw an exception before getting into the async work
        using (FileStream fstemp = new FileStream(LocalFile, FileMode.Open, FileAccess.Read)) { }

        // Create an async op in order to raise the events back to the client on the correct thread.
        asyncOp = AsyncOperationManager.CreateOperation(blob);

        TransferType = TransferTypeEnum.Upload;
        m_Blob = blob;
        m_FileName = LocalFile;

        var file = new FileInfo(m_FileName);
        long fileSize = file.Length;

        FileStream fs = new FileStream(m_FileName, FileMode.Open, FileAccess.Read, FileShare.Read);
        ProgressStream pstream = new ProgressStream(fs);
        pstream.ProgressChanged += pstream_ProgressChanged;
        pstream.SetLength(fileSize);
        m_Blob.ServiceClient.ParallelOperationThreadCount = 10;
        asyncresult = m_Blob.BeginUploadFromStream(pstream, BlobTransferCompletedCallback, new BlobTransferAsyncState(m_Blob, pstream));
    }
...