2017-10-16 143 views
0

我有一個XDocument作爲參數提供,需要壓縮並上傳到Azure文件存儲。這裏有一些問題部分地回答了這個問題,但是對於blob存儲。簽名是不同的,我不能讓它適用於我的情況,沒有在雲中獲取壓縮文件的校驗和錯誤。在內存中壓縮XML文件並將其上傳到azure文件存儲

public static bool ZipAndUploadDocumentToAzure(XDocument doc, Configuration config) 
    { 
     if (IsNullOrEmpty(config.StorageAccountName) || 
      IsNullOrEmpty(config.StorageAccountKey) || 
      IsNullOrEmpty(config.StorageAccounyShareReference) || 
      IsNullOrEmpty(config.StorageAccounyDirectoryReference)) 
     { 
      return false; 
     } 

     CloudStorageAccount storageAccount = CloudStorageAccount.Parse($"DefaultEndpointsProtocol=https;AccountName={config.StorageAccountName};AccountKey={config.StorageAccountKey}"); 

     CloudFileClient fileClient = storageAccount.CreateCloudFileClient(); 
     CloudFileShare share = fileClient.GetShareReference(config.StorageAccounyShareReference); 
     CloudFileDirectory root = share.GetRootDirectoryReference(); 
     CloudFileDirectory dir = root.GetDirectoryReference(config.StorageAccounyDirectoryReference); 

     var cloudFile = dir.GetFileReference("myarchive.zip"); 


     using (var stream = new MemoryStream()) 
     { 
      var xws = new XmlWriterSettings 
      { 
       OmitXmlDeclaration = true, 
       Indent = true 
      }; 

      using (XmlWriter xw = XmlWriter.Create(stream, xws)) 
      { 
       doc.WriteTo(xw); 
      } 

      //where to actually use ZipArchive 'using block' without saving 
      //any of the zip or XML or XDocument files locally 
      //and that it doesn't produce checksum error 

      cloudFile.UploadFromStream(stream);//this gives me XML file 
               //saved to file storage 
      return true; 
     } 
    } 

回答

1

你實際上需要創建一個ZipArchive然後在那裏寫你的Xml文檔。請參閱下面的示例代碼:

static void ZipAndUploadFile() 
    { 
     var filePath = @"C:\Users\Gaurav.Mantri\Desktop\StateProvince.xml"; 
     XDocument doc = null; 
     using (var fs = new FileStream(filePath, FileMode.Open)) 
     { 
      doc = XDocument.Load(fs); 
     } 
     var cred = new StorageCredentials(accountName, accountKey); 
     var account = new CloudStorageAccount(cred, true); 
     var fc = account.CreateCloudFileClient(); 
     var share = fc.GetShareReference("test"); 
     share.CreateIfNotExists(); 
     var rootDirectory = share.GetRootDirectoryReference(); 
     var file = rootDirectory.GetFileReference("test.zip"); 
     using (var stream = new MemoryStream()) 
     { 
      var xws = new XmlWriterSettings 
      { 
       OmitXmlDeclaration = true, 
       Indent = true 
      }; 

      using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true)) 
      { 
       var entry = archive.CreateEntry("doc.xml"); 
       using (var entryStream = entry.Open()) 
       { 
        using (XmlWriter xw = XmlWriter.Create(entryStream, xws)) 
        { 
         doc.WriteTo(xw); 
        } 
       } 
      } 
      stream.Position = 0; 
      file.UploadFromStream(stream); 
     } 
    } 
+0

謝謝!那做了這個工作。 –

相關問題