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);}