2010-04-13 7 views
1

Je suis en train d'écrire un code pour télécharger des fichiers volumineux dans les blobs en utilisant des blocs ... Quand je l'ai testé, il m'a donné un StorageClientExceptionWindows Azure: Stockage client Exception non gérée

Il a déclaré: L'une des entrées de demande est hors de portée.

J'ai eu cette exception dans cette ligne du code:

blob.PutBlock(block, ms, null); 

Voici mon code:

protected void ButUploadBlocks_click(object sender, EventArgs e) 
     { 

      // store upladed file as a blob storage 
      if (uplFileUpload.HasFile) 
      { 
       name = uplFileUpload.FileName; 
       byte[] byteArray = uplFileUpload.FileBytes; 
       Int64 contentLength = byteArray.Length; 
       int numBytesPerBlock = 250 *1024; // 250KB per block 
       int blocksCount = (int)Math.Ceiling((double)contentLength/numBytesPerBlock); // number of blocks 
       MemoryStream ms ; 
       List<string>BlockIds = new List<string>(); 
       string block; 
       int offset = 0; 

       // get refernce to the cloud blob container 
       CloudBlobContainer blobContainer = cloudBlobClient.GetContainerReference("documents"); 

       // set the name for the uploading files 
       string UploadDocName = name; 

       // get the blob reference and set the metadata properties 
       CloudBlockBlob blob = blobContainer.GetBlockBlobReference(UploadDocName); 
       blob.Properties.ContentType = uplFileUpload.PostedFile.ContentType; 

       for (int i = 0; i < blocksCount; i++, offset = offset + numBytesPerBlock) 
       { 
        block = Convert.ToBase64String(BitConverter.GetBytes(i)); 
        ms = new MemoryStream(); 
        ms.Write(byteArray, offset, numBytesPerBlock); 

        blob.PutBlock(block, ms, null); 
        BlockIds.Add(block); 
       } 

       blob.PutBlockList(BlockIds); 

       blob.Metadata["FILETYPE"] = "text"; 
      } 
     } 

Quelqu'un peut-il me dire comment résoudre ...

+0

Obtenez-vous l'exception lors du premier appel à PutBlock, ou après l'envoi de plusieurs blocs? Comme, les blocs 0-9 téléchargent bien, mais le bloc 10 donne l'erreur? – dthorpe

Répondre

2

Je pense que vous devez faire ms.Position = 0 pour ramener le flux au début avant de le télécharger. (Sinon, il est probable que PutBlock essaie de lire le flux et le trouve déjà à la fin.)

Questions connexes