CloudBlob.OpenRead() is not reading all data

前端 未结 1 1833
后悔当初
后悔当初 2021-01-15 03:06

With windows Azure Storage Client Library, CloudBlob.OpenRead() method reads only 4 mb of data. How can I read full stream using OpenRead method.

CloudBlob b         


        
相关标签:
1条回答
  • 2021-01-15 03:50

    I can't reproduce what you're seeing. Things seem to work as expected:

    static void Main(string[] args)
    {
        // I also tried a real cloud storage account. Same result.
        var container = CloudStorageAccount.DevelopmentStorageAccount.CreateCloudBlobClient().GetContainerReference("testcontainer");
        container.CreateIfNotExist();
    
        var blob = container.GetBlobReference("testblob.txt");
    
        blob.UploadText(new String('x', 5000000));
    
        var source = blob.OpenRead();
    
        int BUFFER_SIZE = 4000000;
        byte[] buffer = new byte[BUFFER_SIZE];
        int bytesRead;
        int bytesCopied = 0;
        do
        {
            bytesRead = source.Read(buffer, 0, BUFFER_SIZE);
            bytesCopied += bytesRead;
        } while (bytesRead > 0);
    
        Console.WriteLine(bytesCopied); // prints 5000000
    }
    

    EDIT:

    I've also (in response to the edited question) now tried uploading the blob using OpenWrite, and the result is the same. (I get the full blob back.) I used this code in place of blob.UploadText(...):

    using (var input = File.OpenRead(@"testblob.txt")) //5000000 bytes
    using (var output = blob.OpenWrite())
    {
        input.CopyTo(output);
    }
    

    The final WriteLine still prints 5000000.

    EDIT 2:

    This is getting a bit tiresome. Changing the BUFFER_SIZE to 65536 didn't change anything. The results still seem correct to me. Here's my full application for comparison:

    static void Main(string[] args)
    {
        // I also tried a real cloud storage account. Same result.
        var container = CloudStorageAccount.DevelopmentStorageAccount.CreateCloudBlobClient().GetContainerReference("testcontainer");
        container.CreateIfNotExist();
    
        var blob = container.GetBlobReference("testblob.txt");
    
        using (var input = File.OpenRead(@"testblob.txt")) //5000000 bytes
        using (var output = blob.OpenWrite())
        {
            input.CopyTo(output);
        }
    
        var source = blob.OpenRead();
    
        int BUFFER_SIZE = 65536;
        byte[] buffer = new byte[BUFFER_SIZE];
        int bytesRead;
        int bytesCopied = 0;
        do
        {
            bytesRead = source.Read(buffer, 0, BUFFER_SIZE);
            bytesCopied += bytesRead;
        } while (bytesRead > 0);
    
        Console.WriteLine(bytesCopied); // prints 5000000
    }
    
    0 讨论(0)
提交回复
热议问题