浏览代码

Quick.Azure small fixes

Exilon 7 年之前
父节点
当前提交
eff5ea4406
共有 1 个文件被更改,包括 77 次插入53 次删除
  1. 77 53
      Quick.Azure.pas

+ 77 - 53
Quick.Azure.pas

@@ -7,7 +7,7 @@
   Author      : Kike Pérez
   Author      : Kike Pérez
   Version     : 1.2
   Version     : 1.2
   Created     : 27/08/2015
   Created     : 27/08/2015
-  Modified    : 09/05/2017
+  Modified    : 20/10/2017
 
 
   This file is part of QuickLib: https://github.com/exilon/QuickLib
   This file is part of QuickLib: https://github.com/exilon/QuickLib
 
 
@@ -270,18 +270,21 @@ var
 begin
 begin
   Result := False;
   Result := False;
   BlobService := TAzureBlobService.Create(fconAzure);
   BlobService := TAzureBlobService.Create(fconAzure);
-  if azContainer = '' then azContainer := '$root';
-  CloudResponseInfo := TCloudResponseInfo.Create;
   try
   try
-    BlobService.Timeout := fTimeout;
-    Content := FileToArray(cFilename);
-    if azBlobName = '' then azBlobName := cFilename;
-    if azBlobName.StartsWith('/') then azBlobName := Copy(azBlobName,2,Length(azBlobName));
-    Result := BlobService.PutBlockBlob(azContainer,azBlobName,Content,EmptyStr,nil,nil,CloudResponseInfo);
-    azResponseInfo := GetResponseInfo(CloudResponseInfo);
+    if azContainer = '' then azContainer := '$root';
+    CloudResponseInfo := TCloudResponseInfo.Create;
+    try
+      BlobService.Timeout := fTimeout;
+      Content := FileToArray(cFilename);
+      if azBlobName = '' then azBlobName := cFilename;
+      if azBlobName.StartsWith('/') then azBlobName := Copy(azBlobName,2,Length(azBlobName));
+      Result := BlobService.PutBlockBlob(azContainer,azBlobName,Content,EmptyStr,nil,nil,CloudResponseInfo);
+      azResponseInfo := GetResponseInfo(CloudResponseInfo);
+    finally
+      CloudResponseInfo.Free;
+    end;
   finally
   finally
     BlobService.Free;
     BlobService.Free;
-    CloudResponseInfo.Free;
   end;
   end;
 end;
 end;
 
 
@@ -305,12 +308,15 @@ begin
     try
     try
       BlobService.Timeout := fTimeout;
       BlobService.Timeout := fTimeout;
       CloudResponseInfo := TCloudResponseInfo.Create;
       CloudResponseInfo := TCloudResponseInfo.Create;
-      Content := StreamToArray(cStream);
-      Result := BlobService.PutBlockBlob(azContainer,azBlobName,Content,EmptyStr,nil,nil,CloudResponseInfo);
-      azResponseInfo := GetResponseInfo(CloudResponseInfo);
+      try
+        Content := StreamToArray(cStream);
+        Result := BlobService.PutBlockBlob(azContainer,azBlobName,Content,EmptyStr,nil,nil,CloudResponseInfo);
+        azResponseInfo := GetResponseInfo(CloudResponseInfo);
+      finally
+        CloudResponseInfo.Free;
+      end;
     finally
     finally
       BlobService.Free;
       BlobService.Free;
-      CloudResponseInfo.Free;
     end;
     end;
   except
   except
     on E : Exception do
     on E : Exception do
@@ -334,12 +340,16 @@ begin
   BlobService := TAzureBlobService.Create(fconAzure);
   BlobService := TAzureBlobService.Create(fconAzure);
   try
   try
     BlobService.Timeout := fTimeout;
     BlobService.Timeout := fTimeout;
-    CloudResponseInfo := TCloudResponseInfo.Create;
     fs := TFileStream.Create(cFilenameTo,fmCreate);
     fs := TFileStream.Create(cFilenameTo,fmCreate);
     try
     try
       try
       try
-        Result := BlobService.GetBlob(azContainer,azBlobName,fs,EmptyStr,CloudResponseInfo);
-        azResponseInfo := GetResponseInfo(CloudResponseInfo);
+        CloudResponseInfo := TCloudResponseInfo.Create;
+        try
+          Result := BlobService.GetBlob(azContainer,azBlobName,fs,EmptyStr,CloudResponseInfo);
+          azResponseInfo := GetResponseInfo(CloudResponseInfo);
+        finally
+          CloudResponseInfo.Free;
+        end;
       except
       except
         Result := False;
         Result := False;
       end;
       end;
@@ -348,7 +358,6 @@ begin
     end;
     end;
   finally
   finally
     BlobService.Free;
     BlobService.Free;
-    CloudResponseInfo.Free;
   end;
   end;
 end;
 end;
 
 
@@ -364,16 +373,19 @@ begin
   BlobService := TAzureBlobService.Create(fconAzure);
   BlobService := TAzureBlobService.Create(fconAzure);
   try
   try
     BlobService.Timeout := fTimeout;
     BlobService.Timeout := fTimeout;
-    CloudResponseInfo := TCloudResponseInfo.Create;
     try
     try
-      Result := BlobService.GetBlob(azContainer,azBlobName,Stream,EmptyStr,CloudResponseInfo);
-      azResponseInfo := GetResponseInfo(CloudResponseInfo);
+      CloudResponseInfo := TCloudResponseInfo.Create;
+      try
+        Result := BlobService.GetBlob(azContainer,azBlobName,Stream,EmptyStr,CloudResponseInfo);
+        azResponseInfo := GetResponseInfo(CloudResponseInfo);
+      finally
+        CloudResponseInfo.Free;
+      end;
     except
     except
       Stream := nil;
       Stream := nil;
     end;
     end;
   finally
   finally
     BlobService.Free;
     BlobService.Free;
-    CloudResponseInfo.Free;
   end;
   end;
 end;
 end;
 
 
@@ -395,10 +407,14 @@ begin
   BlobService := TAzureBlobService.Create(fconAzure);
   BlobService := TAzureBlobService.Create(fconAzure);
   try
   try
     BlobService.Timeout := fTimeout;
     BlobService.Timeout := fTimeout;
-    CloudResponseInfo := TCloudResponseInfo.Create;
     try
     try
-      Result := BlobService.CopyBlob(azTargetContainer,azTargetBlobName,azSourceContainer,azSourceBlobName,'',nil,CloudResponseInfo);
-      azResponseInfo := GetResponseInfo(CloudResponseInfo);
+      CloudResponseInfo := TCloudResponseInfo.Create;
+      try
+        Result := BlobService.CopyBlob(azTargetContainer,azTargetBlobName,azSourceContainer,azSourceBlobName,'',nil,CloudResponseInfo);
+        azResponseInfo := GetResponseInfo(CloudResponseInfo);
+      finally
+        CloudResponseInfo.Free;
+      end;
     except
     except
       on E : Exception do
       on E : Exception do
       begin
       begin
@@ -409,7 +425,6 @@ begin
     end;
     end;
   finally
   finally
     BlobService.Free;
     BlobService.Free;
-    CloudResponseInfo.Free;
   end;
   end;
 end;
 end;
 
 
@@ -461,7 +476,6 @@ begin
   Result := False;
   Result := False;
   if azContainer = '' then azContainer := '$root';
   if azContainer = '' then azContainer := '$root';
   BlobService := TAzureBlobService.Create(fconAzure);
   BlobService := TAzureBlobService.Create(fconAzure);
-  CloudResponseInfo := TCloudResponseInfo.Create;
   try
   try
     BlobService.Timeout := fTimeout;
     BlobService.Timeout := fTimeout;
     AzParams := TStringList.Create;
     AzParams := TStringList.Create;
@@ -471,18 +485,22 @@ begin
       AzParams.Values['delimiter'] := '/';
       AzParams.Values['delimiter'] := '/';
       AzParams.Values['maxresults'] := '1';
       AzParams.Values['maxresults'] := '1';
       cNextMarker := '';
       cNextMarker := '';
-      azBlobList := BlobService.ListBlobs(azContainer,cNextMarker,AzParams,CloudResponseInfo);
+      CloudResponseInfo := TCloudResponseInfo.Create;
       try
       try
-        if (Assigned(azBlobList)) and (azBlobList.Count > 0) and (CloudResponseInfo.StatusCode = 200) then Result := True;
+        azBlobList := BlobService.ListBlobs(azContainer,cNextMarker,AzParams,CloudResponseInfo);
+        try
+          if (Assigned(azBlobList)) and (azBlobList.Count > 0) and (CloudResponseInfo.StatusCode = 200) then Result := True;
+        finally
+          azBlobList.Free;
+        end;
       finally
       finally
-        azBlobList.Free;
+        CloudResponseInfo.Free;
       end;
       end;
     finally
     finally
       AzParams.Free;
       AzParams.Free;
     end;
     end;
   finally
   finally
     BlobService.Free;
     BlobService.Free;
-    CloudResponseInfo.Free;
   end;
   end;
 end;
 end;
 
 
@@ -498,11 +516,14 @@ begin
   try
   try
     BlobService.Timeout := fTimeout;
     BlobService.Timeout := fTimeout;
     CloudResponseInfo := TCloudResponseInfo.Create;
     CloudResponseInfo := TCloudResponseInfo.Create;
-    Result := BlobService.DeleteBlob(azContainer,azBlobName,False,EmptyStr,CloudResponseInfo);
-    azResponseInfo := GetResponseInfo(CloudResponseInfo);
+    try
+      Result := BlobService.DeleteBlob(azContainer,azBlobName,False,EmptyStr,CloudResponseInfo);
+      azResponseInfo := GetResponseInfo(CloudResponseInfo);
+    finally
+      CloudResponseInfo.Free;
+    end;
   finally
   finally
     BlobService.Free;
     BlobService.Free;
-    CloudResponseInfo.Free;
   end;
   end;
 end;
 end;
 
 
@@ -520,7 +541,6 @@ begin
   cNextMarker := '';
   cNextMarker := '';
   if azContainer = '' then azContainer := '$root';
   if azContainer = '' then azContainer := '$root';
   BlobService := TAzureBlobService.Create(fconAzure);
   BlobService := TAzureBlobService.Create(fconAzure);
-  CloudResponseInfo := TCloudResponseInfo.Create;
   try
   try
     BlobService.Timeout := fTimeout;
     BlobService.Timeout := fTimeout;
     repeat
     repeat
@@ -529,32 +549,36 @@ begin
         AzParams.Values['prefix'] := azBlobsStartWith;
         AzParams.Values['prefix'] := azBlobsStartWith;
         if not Recursive then AzParams.Values['delimiter'] := '/';
         if not Recursive then AzParams.Values['delimiter'] := '/';
         if cNextMarker <> '' then AzParams.Values['marker'] := cNextMarker;
         if cNextMarker <> '' then AzParams.Values['marker'] := cNextMarker;
-        azBlobList := BlobService.ListBlobs(azContainer,cNextMarker,AzParams,CloudResponseInfo);
-        azResponseInfo := GetResponseInfo(CloudResponseInfo);
-        if Assigned(azBlobList) then
-        begin
-          try
-            for azBlob in azBlobList do
-            begin
-              Blob := TAzureBlobObject.Create;
-              Blob.Name := azBlob.Name;
-              Blob.Size := StrToInt64Def(azBlob.Properties.Values['Content-Length'],0);
-              Blob.LastModified := GMT2DateTime(azBlob.Properties.Values['Last-Modified']);
-              Result.Add(Blob);
+        CloudResponseInfo := TCloudResponseInfo.Create;
+        try
+          azBlobList := BlobService.ListBlobs(azContainer,cNextMarker,AzParams,CloudResponseInfo);
+          azResponseInfo := GetResponseInfo(CloudResponseInfo);
+          if Assigned(azBlobList) then
+          begin
+            try
+              for azBlob in azBlobList do
+              begin
+                Blob := TAzureBlobObject.Create;
+                Blob.Name := azBlob.Name;
+                Blob.Size := StrToInt64Def(azBlob.Properties.Values['Content-Length'],0);
+                Blob.LastModified := GMT2DateTime(azBlob.Properties.Values['Last-Modified']);
+                Result.Add(Blob);
+              end;
+            finally
+              //frees azbloblist objects
+              for azBlob in azBlobList do azBlob.Free;
+              azBlobList.Free;
             end;
             end;
-          finally
-            //frees azbloblist objects
-            for azBlob in azBlobList do azBlob.Free;
-            azBlobList.Free;
           end;
           end;
+        finally
+          CloudResponseInfo.Free;
         end;
         end;
       finally
       finally
-        AzParams.Free;
+        FreeAndNil(AzParams);
       end;
       end;
     until (cNextMarker = '') or (azResponseInfo.StatusCode <> 200);
     until (cNextMarker = '') or (azResponseInfo.StatusCode <> 200);
   finally
   finally
     BlobService.Free;
     BlobService.Free;
-    CloudResponseInfo.Free;
   end;
   end;
 end;
 end;