2015-09-30 33 views
1

如何從上次斷開連接恢復Azure上傳。在網絡故障中,我可以繼續,但是我的系統重新啓動後電源故障後必須執行的操作。我怎樣才能保存我的軟件的當前狀態(這是上傳文件到Azure)。所以如果我保存我的狀態,我可以從最後一點恢復它。我使用此代碼進行上傳。代碼來自互聯網。繼續使用Azure在電源故障後上傳

private void UploadBigFile(){ 
int count = 0, bufferSize = 40 * 1024, blockCount = 0; 
string filePath = @"D:\Dua.zip"; 
List<string> blockIds = new List<string>(); 
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
CloudBlobContainer container = blobClient.GetContainerReference("mytestcontainer"); 
container.CreateIfNotExists(); 
byte[] bufferBytes = new byte[bufferSize]; 
string fileName = Path.GetFileName(filePath); 
CloudBlockBlob blob = container.GetBlockBlobReference(fileName); 
using (FileStream fileStream = File.OpenRead(filePath)){ 
blockCount = (int)(fileStream.Length/bufferSize) + 1; 
Int64 currentBlockSize = 0; 
int currentCount = blockIds.Count(); 
fileStream.Seek(bufferSize * currentCount, SeekOrigin.Begin); 
for (int i = blockIds.Count; i < blockCount; i++){ 
currentBlockSize = bufferSize; 
if (i == blockCount - 1){ 
currentBlockSize = fileStream.Length - bufferSize * i; 
bufferBytes = new byte[currentBlockSize];} 
if (currentBlockSize == 0) break; 
fileStream.Read(bufferBytes, 0, Convert.ToInt32(currentBlockSize)); 
using (MemoryStream memoryStream = new MemoryStream(bufferBytes)){ 
try{ 
string blockId = Convert.ToBase64String(Encoding.UTF8.GetBytes(Guid.NewGuid().ToString())); 
blob.PutBlock(blockId, memoryStream, null); 
blockIds.Add(blockId); 
count++; 
label1.Text = Convert.ToString(count); 
label1.Refresh();} 
catch (Exception){}}}} 
blob.PutBlockList(blockIds);} 

回答

1

如果你在跟蹤塊,你可以保存位置,然後重新啓動它。這是一篇關於uploading large files的博客文章;它的結尾告訴你如何去做你想做的事情。